Kafka知识点汇总
整体结构
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZXJpY19zdW5haA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
Producer
Part
- kafka以topic来进行消息管理,每一个topic包括多个part(ition),每一个part相应一个逻辑log,有多个segment组成。
- 每一个segment中存储多条消息(见下图),消息id由其逻辑位置决定。即从消息id可直接定位到消息的存储位置。避免id到位置的额外映射。
- 每一个part在内存中相应一个index,记录每一个segment中的第一条消息偏移。
- 公布者发到某个topic的消息会被均匀的分布到多个part上(随机或依据用户指定的回调函数进行分布)。broker收到公布消息往相应part的最后一个segment上加入该消息,
- 当某个segment上的消息条数达到配置值或消息公布时间超过阈值时。segment上的消息会被flush到磁盘。仅仅有flush到磁盘上的消息订阅者才干订阅到。
- segment达到一定的大小后将不会再往该segment写数据。broker会创建新的segment。
Broke
- 消息不在内存中cache,直接写入到磁盘,充分利用磁盘的顺序读写性能
- 直接使用linux 文件系统的cache,来高效缓存数据。
- 即使消息被消费,消息仍然不会被马上删除.日志文件将会依据broker中的配置要求,保留一定的时间之后删除
- 採用linux Zero-Copy提高发送性能。
- Topic划分为多个partition,提高parallelism
- 能够通过实现Partitioner接口来定制Partition的分区规则
- At least one 消息绝不会丢。但可能会反复传输
- 通过冗余机制来保证信息的安全
- 一个Broke能够包括多个Topic的Part,一个Topic也能够将多个Part分布到不同的不同的Broke上
- 数据压缩:支持GZIP和Snappy压缩协议
Consumer 公共特性
- Consumer依据消费能力自主控制消息拉取速度
- Consumer依据自身情况自主选择消费模式,比如批量,反复消费,从尾端開始消费等
Lower Level Consumer
- Consumer从kafka集群pull数据
- Consumer负责维护消息的消费记录,控制获取消息的offset
- Consumer可将offset设成一个较小的值,又一次消费一些消息
- 必须找出指定Topic Partition中的lead
broker - 加入事务管理机制以保证消息被处理且仅被处理一次
- 在一个处理过程中仅仅消费Partition当中的一部分消息
High Level Consumer
- High Level模式下的Group Name 是整个Kafka集群的全局变量
- 消息消费以Consumer Group为单位,每一个Consumer Group中能够有多个consumer,每一个consumer是一个线程。topic的每一个partition同一时候仅仅能被某一个consumer读 取。Consumer Group相应的每一个partition都有一个最新的offset的值,存储在zookeeper上的。
所以在正常情况下不会出现反复消费的情况。
- 由于consumer的offerset并非实时的传送到zookeeper(通过配置来制定更新周期)。所以Consumer假设突然Crash,有可能会读取反复的信息
High Level Consumer 能够而且应该被使用在多线程的环境,线程模型中线程的数量(也代表group中consumer的数量)和topic的partition数量有关,以下列举一些规则:
- 当提供的线程数量多于partition的数量。则部分线程将不会接收到消息;
- 当提供的线程数量少于partition的数量,则部分线程将从多个partition接收消息;
- 当某个线程从多个partition接收消息时,不保证接收消息的顺序;可能出现从partition3接收5条消息,从partition4接收6条消息。接着又从partition3接收10条消息。
- 当加入很多其它线程时,会引起kafka做re-balance, 可能改变partition和线程的相应关系。
Consumer Group
- 同意consumer
group(包括多个consumer。如一个集群同一时候消费)对一个topic进行消费。不同的consumer
group之间独立订阅。互不干扰。 - 当broker或consumer增加或离开时会触发负载均衡算法,使得一个consumer
group内的多个consumer的订阅负载平衡 - 每一个partition仅仅会被consumer
group内的一个consumer消费,故kafka保证每一个partition内的消息会被顺序的订阅,但多个Consumer
Group可同一时候消费这一消息。。 - 每一个Consumer属于一个特定的Consumer Group(可为每一个Consumer指定group name,若不指定group name则属于默认的group
- 假设须要实现广播,仅仅要每一个Consumer有一个独立的Group
- 要实现单播仅仅要全部的Consumer在同一个Group里
Zookeeper
- 每一个broker启动后会在zookeeper上注冊一个暂时的broker
registry,包括broker的ip地址和port号。所存储的topics和partitions信息。 - 每一个consumer启动后会在zookeeper上注冊一个暂时的consumer
registry:包括consumer所属的consumer
group以及订阅的topics。 - 每一个consumer
group关联一个暂时的owner registry和一个持久的offset
registry。对于被订阅的每一个partition包括一个owner
registry。内容为订阅这个partition的consumer id;同一时候包括一个offset registry。内容为上一次订阅的offset。
Kafka知识点汇总的更多相关文章
- nginx几个知识点汇总
WHY? 为什么用Nginx而不用LVS? 7点理由足以说明一切:1 .高并发连接: 官方测试能够支撑 5 万并发连接,在实际生产环境中跑到 2 - 3 万并发连接数.?2 .内存消耗少: 在 3 万 ...
- python全栈开发 * 10知识点汇总 * 180612
10 函数进阶 知识点汇总 一.动态参数 形参的第三种1.动态接收位置传参 表达:*args (在参数位置编写 * 表⽰接收任意内容) (1)动态位置参数def eat(*args): print(a ...
- 清华大学OS操作系统实验lab1练习知识点汇总
lab1知识点汇总 还是有很多问题,但是我觉得我需要在查看更多资料后回来再理解,学这个也学了一周了,看了大量的资料...还是它们自己的80386手册和lab的指导手册觉得最准确,现在我就把这部分知识做 ...
- kafka知识点整理总结
kafka知识点整理总结 只不过是敷衍 2017-11-22 21:39:59 kafka知识点整理总结,以备不时之需. 为什么要使用消息系统: 解耦 并行 异步通信:想向队列中放入多少消息就放多少, ...
- c++ 函数知识点汇总
c++ 函数知识点汇总 swap函数 交换两个数组元素 比如 swap(a[i],a[j]); 就是交换a[i] 和 a[j] 的值 strcpy() 复制一个数组元素的值到另一个数组元素里 strc ...
- 前端开发 JavaScript 干货知识点汇总
很多初学的朋友经常问我,前端JavaScript都需要学习哪些东西呀?哪些是JavaScript的重点知识啊? 其实做前端开发工程师,所有的知识点都是我们学习必备的东西,只有扎实的技术基础才是高薪的关 ...
- BBS项目知识点汇总
目录 bbs项目知识点汇总 一. JavaScript 1 替换头像 2 form表单拿数据 3 form组件error信息渲染 4 添加html代码 5 聚焦操作 二 . html在线编辑器 三 . ...
- Java面试知识点汇总
Java面试知识点汇总 置顶 2019年05月07日 15:36:18 温柔的谢世杰 阅读数 21623 文章标签: 面经java 更多 分类专栏: java 面试 Java面试知识汇总 版权声明 ...
- 离散数学 II(最全面的知识点汇总)
离散数学 II(知识点汇总) 目录 离散数学 II(知识点汇总) 代数系统 代数系统定义 例子 二元运算定义 运算及其性质 二元运算的性质 封闭性 可交换性 可结合性 可分配性 吸收律 等幂性 消去律 ...
随机推荐
- Linux cp复制
复制指定目录下的全部文件到另一个目录中文件及目录的复制是经常要用到的.linux下进行复制的命令为cp.假设复制源目录 为 dir1 ,目标目录为dir2.怎样才能将dir1下所有文件复制到dir2下 ...
- wlan
一.概述 CSMA/CD --->以太网介质 CSMA/CA------->无线介质 IEEE----->802.11 a b g e f h i j 分类 ...
- 如何使用百度地图API
一.申请密钥 1.先用eclipse创建一个Android工程 2.在百度api官网上申请一个密钥,链接:http://lbsyun.baidu.com/apiconsole/key 二.工程配置 1 ...
- LeetCode--二分查找相关算法
-(1)有一个升序排列的非负数组,要求利用o(logn)的时间复杂度找到数组中确定数字target的第一次出现的位置下标和最后一次出现的位置下标,如果不存在该target返回[-1,-1] 解决方案: ...
- 30分钟学会如何使用Shiro(转自:http://www.cnblogs.com/learnhow/p/5694876.html)
本篇内容大多总结自张开涛的<跟我学Shiro>原文地址:http://jinnianshilongnian.iteye.com/blog/2018936 我并没有全部看完,只是选择了一部分 ...
- uva 11021
题意:有k只麻球,每只活一天就会死亡,临死之前可能会生出一些新的麻球.具体来说,生i个麻球的概率为pi.给定m,求m天后所有麻球死亡的概率.注意,不足m天时就已经全部死亡的情况也算在内. 分析:由于每 ...
- ElasticSearch API 之 GET
GET API是Elasticsearch中常用的操作,一般用于验证文档是否存在:或者执行CURD中的文档查询.与检索不同的是,GET查询是实时查询,可以实时查询到索引结果.而检索则是需要经过处理才能 ...
- 【HDOJ6354】Everything Has Changed(计算几何)
题意: 给定一个平面和一个(0,0)为中心的大圆,有n个小圆保证没有两两之间相交与覆盖整个大圆的情况,求小圆覆盖后大圆的周长并 1≤m≤100, -1e3<=x[i],y[i]<=1e3, ...
- msp430入门学习43
msp430的其他十一 msp430入门学习
- luogu P1032 字串变换
题目描述 已知有两个字串 A, B 及一组字串变换的规则(至多6个规则): A1 -> B1 A2 -> B2 规则的含义为:在 A$中的子串 A1 可以变换为 B1.A2 可以变换为 B ...