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 rm删除
将 test1子目录及子目录中所有档案删除 命令: rm -r test1 rm -rf test2命令会将 test2 子目录及子目录中所有档案删除,并且不用一一确认 命令: rm -rf tes ...
- HDU-1829 A Bug's Life。并查集构造,与POJ1709异曲同工!
A Bug's Life Find them, Catch them 都是并查集构造的题,不久前 ...
- 刷题总结:最长公共字串(spoj1811)(后缀自动机)
题目: 就不贴了吧···如题: 题解: 后缀自动机模版题:没啥好说的···· 代码: #include<iostream> #include<cstdio> #include& ...
- 【C++】DLL内共享数据区在进程间共享数据(重要)
因项目需要,需要在DLL中共享数据,即DLL中某一变量只执行一次,在运行DLL中其他函数时该变量值不改变:刚开始想法理解错误,搜到了DLL进程间共享数据段,后面发现直接在DLL中定义全局变量就行,当时 ...
- hdu 4951
Multiplication table Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Oth ...
- Python入门--5--列表
python没有数组 蛋是有列表 列表里面可以有:整数,浮点数,字符串,对象 没有数组,没有数组,没有数组,不重要的也说三遍!! 一.创建列表 x = ['abc','sas','www'] ...
- Lucene 6.5.0 入门Demo(2)
参考文档:http://lucene.apache.org/core/6_5_0/core/overview-summary.html#overview.description 对于path路径不是很 ...
- jquery知识汇总
jQuery 选择器 选择器 实例 选取 * $ ...
- 【Android】状态栏通知Notification、NotificationManager详解(转)
在Android系统中,发一个状态栏通知还是很方便的.下面我们就来看一下,怎么发送状态栏通知,状态栏通知又有哪些参数可以设置? 首先,发送一个状态栏通知必须用到两个类: NotificationMa ...
- 汉若塔系列续:汉诺塔VIII、汉诺塔IX、汉诺塔X。
汉诺塔VIII,在经典汉若塔问题上,问n个盘子的情况下,移动m次以后,是什么状态.(与第七代互为逆命题) 我的思路:本质还是dfs,但是用m的值来指引方向,每搜一层确定第i个盘子在哪个塔,o(n)的算 ...