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(知识点汇总) 代数系统 代数系统定义 例子 二元运算定义 运算及其性质 二元运算的性质 封闭性 可交换性 可结合性 可分配性 吸收律 等幂性 消去律 ...
随机推荐
- map 插入数据的方式局别
#include<map> #include<iostream> usingnamespace std; int main() { map <int, int> m ...
- TOJ 5020: Palindromic Paths
5020: Palindromic Paths Time Limit(Common/Java):10000MS/30000MS Memory Limit:65536KByteTotal Su ...
- 九度oj 题目1352:和为S的两个数字
题目描述: 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输入: 每个测试案例包括两行: 第一行包含一个整数n和k, ...
- 【Luogu】P1879玉米田(状压DP)
题目链接 数据范围这么小,难度又这么大,一般就是状态压缩DP了. 对输入进行处理,二进制表示每一行的草地状况.如111表示这一行草地肥沃,压缩成7. 所以f[i][j]表示第i行状态为j时的方案数 状 ...
- P3102 [USACO14FEB]秘密代码Secret Code
题目描述 Farmer John has secret message that he wants to hide from his cows; the message is a string of ...
- DP的序--Codeforces956E. Wardrobe
$n \leq 10000$个盒子,有高度,高度总和$\leq 10000$,盒子有重要的和不重要的,问最多有多少重要盒子的底端在区间$[L,R]$. 这是个入门级的DP,但需要一点胆量MD这题能放D ...
- eq=等于gt=大于lt=小于的英文全称
EQ: Equal GT: Greater Than LT: Less than 知道全称就不会忘记
- msp430入门学习40
msp430的其他八 msp430入门学习
- Gdb学习笔记1
其实,从很早就开始接触gdb程序,gdb调试程序伴我成长,现在对其用法记录以下: 当程序的运行结果和预期结果不一致,或者程序出现运行错误时,gdb就可以派上大用处了.调试的基本过程是: -> ...
- 洛谷P1352 没有上司的舞会
题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri, ...