kafka的相关组件介绍

avatar 2021年6月5日18:17:13 评论 718 次浏览

1.1.1 kafka的整体架构图

kafka的名词解释和工作方式

1、Producer:消息生产者,就是向kafka broker发送消息的客户端
2、Concumer:消息消费者,向kafka broker拉取消息的客户端
3、Topic:每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)
4、Broker:Kafka集群包含一个或多个服务器,这种服务器被称为broker
5、Partition:是物理上的概念,每个Topic包含一个或多个Partition(分区),partition中的每个消息都会分配一个有序的id(offset),kafka只保证按一个partition中的顺序将消息发送给Consumer,不保证一个topic整体(partition间)的顺序。
6、Consumer Group:每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)
7、Offset:kafka的存储文件都是按照offset.kafka来命名,用offset做名字的好处就是方便查找。例如你想找打1025的位置,只要找到1024.kafka的文件即可,当然第一个文件就是00000000000.kafka。

1.1.2 Consumer与topic的关系

1、每个group中可以有多个Consumer,每个Consumer属于一个Consumer Group通常情况下,一个Group中包含一个或多个Consumer,这样不仅可以提高topic中消息的并发消费能力,而且可以提高故障的容错性,如果Group中的某个Consumer失效那么其消费的Partitions将会被其他Consumer自动接管。
2、对于Topic中的一条特定的消息,只会被订阅此Topic的每个Group中的其中一个Consumer消费,此消息不会发送给一个Group的多个Consumer,那么一个Group中的所有Consumer将会交错的消费整个Topic,每个Group中Consumer消息消费相互独立,我们可以认为一个Group是一个‘订阅’者。
3、在kafka中,一个partition中的消息只会被Group中的一个Consumer消费(同一时刻),一个Topic中的每个partition,只会被一个订阅者中的一个Consumer消费,不过一个Consumer可以同时消费多个partitions中的消息
4、kafka的设计原理决定,对于一个topic,同一个Group中不能多于partitions个数的Consumer同时消费,否则将意味着Consumer将无法获得消息。
kafka只保证一个partition中的消息被某个Consumer消费时是顺序的,不能保证全局partitions有序。

1.1.3 消息的分发

1、当producer获取到metadata信息之后,producer将会和Topic下所有partition leader保持socket连接。
2、消息由producer直接通过socket发送broker,中间不会经过任何路由成,事实上,消息被路由到哪个partition上有producer客户端决定,比如可以采用‘readom’,’key-hash’,’轮询’等,如果一个Topic中有多个partitions,那么在producer实现消息负载分发是必要的。
3、在producer端的配置文件中,开发者可以指定partition的路由方式
4、producer消息发送的应答机制
设置发送数据是否需要服务器的反馈,有三个值0,1,-1
0:producer不等待broker发送ack
1:当leader接收的消息之后发送ack
all:当所有的follower都同步消息成功发送ack
使用的是acks属性

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: