这是我参与「第四届青训营 」笔记创作活动的的第5天
1.kafka架构介绍
图中可以发现分成四部分,producer,broker,consumer和zookeeper。
zookeeper:有选举机制,提供一致性,可用性是一半以上节点存活即可读写,提供了watch机制和持久/临时节点的能力。负责kafka中存储数据
broker:kafka使用zookeeper来维护集群成员的信息。broker是消息的中介,生产者peoducer往broker里面指定的topic中写信息,消费者consumer从broker里面拉取topic的消息,然后进行业务处理,broker在中间起到一个代理保存信息的中转站。
Topic:Kafka对消息进行归类,发送到集群的每一条消息都要指定一个topic。
Producer:生产者,负责发布消息到broker。
ConsumerGroup:每个consumer属于一个特定的consumer group,可为每个consumer指定group name,若不指定,则属于默认的group,一条消息可以发送到不同的consumer group,但一个consumer group中只能有一个consumer能消费这条消息。
2.kafka的一些机制
副本同步机制: Kafka提供了数据复制算法保证,如果leader发生故障或挂掉,一个新leader被选举并被接受客户端的消息成功写入。
当一个leader宕机,kafka Controller从分区的ISR中选一个作为leader。controller会将Leader的改变直接通过RPC的方式(比Zookeeper Queue的方式更高效)通知需为此作出响应的Broker。同时controller也负责增删Topic以及Replica的重新分配。所有的副本(replicas)统称为Assigned Replicas,即AR。 AR=ISR+OSR。
kafka的副本分配逻辑:在Kafka集群中,每个Broker都有均等分配Partition的Leader机会。
broker负载均衡,Topic分配partition和partition replica的算法: 将所有N Broker和待分配的i个Partition排序。 将第i个Partition分配到第(i mod n)个Broker上。 将第i个Partition的第j个副本分配到第((i + j) mod n)个Broker上。
消费者分区分配策略(Consumer Reblance)
- range策略
对应的实现类是org.apache.kafka.clients.consumer.RangeAssignor 这是默认的分配策略
可以通过消费者配置中partition.assignment.strategy参数来指定分配策略,
1、range分配策略针对的是主题
2、首先,将分区按数字顺序排行序,消费者按消费者名称的字典序排好序
3、然后,用分区总数除以消费者总数。如果能够除尽,则皆大欢喜,平均分配;若除不尽,则位于排序前面的消费者将多负责一个分区
今天先到这里吧。。。虚拟机突然连不上网络,导致kafka暂时无法安装。