Kafka 各组件架构简介
上一篇:JetBrains 宣布涨价
大家好,我是顶级架构师。
Kafka各组件说明
1.Broker
2.Topic
3.Topic 与 Broker
4. Partition log
每当一个message被发布到一个topic上的一个partition,broker应会将该message追加到这个逻辑log文件的最后一个segment上。这些segments 会被flush到磁盘上,Flush时可以按照时间来进行,也可以按照message 数来执行。 每个partition都是一个有序的、不可变的结构化的提交日志记录的序列。在每个partition中每一条日志记录都会被分配一个序号,通常称为offset,offset在partition内是唯一的。论点逻辑文件会被化分为多个文件segment(每个segment的大小一样的)。 Broker集群将会保留所有已发布的message records,不管这些消息是否已被消费。保留时间依赖于一个可配的保留周期。例如:如果设置了保留策略是2day,那么每一条消息发布两天内是被保留的,在这个2day的保留时间内,消息是可以被消费的。过期后不再保留。
5.Partition distribution
Part 1的leader是broker1,followers是broker2\3。Part2的leader是broker2,followers是broker1\4。Part3的leader是broker3,followers是broker1\3。Part4的leader是broker4,followers是broker2\3。
对于topic2的3个partition:
Part1的leader是broker1,followers是broker2。Part2的leader是broker2,followers是broker3。Part3的leader是broker3,followers是broker4。
对于topic2的4个partition:
Part 1的leader是broker4,followers是broker1\2\3。Part2的leader是broker2,followers是broker1\3\4。Part3的leader是broker3,followers是broker1\2\4。Part4的leader是broker1,followers是broker2\3\4。
下面是一个真实的例子:
6.Producer
Producer作为消息的生产者,在生产完消息后需要将消息投送到指定的目的地(某个topic的某个partition),Producer可以根据指定选择partition的算法或者是随机方式来选择发布消息到哪个partition。
7.Consumer
在Kafka中,同样有consumer group的概念,它是逻辑上将一些consumer分组。因为每个kafka consumer是一个进程,所以一个consumer group中的consumers将可能是由分布在不同机器上的不同的进程组成的。 Topic中的每一条消息可以被多个consumer group消费,然而每个consumer group内只能有一个consumer来消费该消息。所以,如果想要一条消息被多个consumer消费,那么这些consumer就必须是在不同的consumer group中。 每个consumer可以订阅多个topic。 每个consumer会保留它读取到某个partition的offset,而consumer 是通过zookeeper来保留offset的。
架构图
欢迎大家进行观点的探讨和碰撞,各抒己见。如果你有疑问,也可以找我沟通和交流。
最后给读者整理了一份BAT大厂面试真题,需要的可扫码回复“面试题”即可获取。
「顶级架构师」建立了读者架构师交流群,大家可以添加小编微信进行加群。欢迎有想法、乐于分享的朋友们一起交流学习。
扫描添加好友邀你进架构师群,加我时注明【姓名+公司+职位】
版权申明:内容来源网络,版权归原作者所有。如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。
猜你还想看
2.2 万 Star,号称配置 Nginx 服务器所需的唯一工具!
分布式接口幂等性、分布式限流:Guava 、nginx和lua限流