Kafka特点
1.高吞吐量,低延迟。
2.可拓展性:集群支持热拓展。
3.持久性:消息被存储在硬盘中,支持数据备份。
4.容错性:允许集群结点失败。
5.高并发:支持上千个客户端进行读写。
Kafka的组成
broker:kafka的节点(服务器)
topic:用于存储消息的逻辑概念,实际存储消息的是topic中的patition(分区),一个topic可以拥有多个partition
partition:用于存储消息的真正位置
replica(副本):每一个partition都会有一个或者多个replica,用于当broker出现问题时候kafka集群能够正常使用,一般每个partition的replica都会均匀的分布在broker中(在replica中有一个leader和多个follower,kafka只会向leader读写数据,然后同步给follower,这里follower不处理读写任务,只是用于数据的备份)
producer:用于创建、发送消息的客户端。发送者是针对topic进行发送,消息会根据hash运算均匀的分布在不同partition中。
consumer:用于消费消息的客户端,消费者是针对于topic进行消费(也可以指定对应的partition进行消费,不过有可能无法完全消费topic的所有消息)
consumerGroup:消费者组,一个消费者组只需要指定一个topic,然后消费者组中的消费者会顺序消费topic中对应顺序的partition。
1.如果 partition > 消费者组员数
那么就会存在一个消费者消费多个partition
2. partition = 消费者组员数
那么每一个消费者就会顺序消费一个partition
3. partition < 消费者组员数
那么就会存在一个或者多个消费者无partition消费(即处于空闲状态)
所以这里我们可以看明白,在consumerGroup中,一个consumer可以消费一个或者多个partition,但一个partition只能被一个consumer所消费。
如果想让一个partition被多个consumer消费的话,那么则保证这两个consumer不在同一个consumerGroup中即可。
Kafka Broker Leader选举机制
Kafka依赖于zookeeper实现的,zookeeper为kafka提供了保存offset偏移量,节点信息,集群等。
当Kafka没有Leader的时候,此时所有的broker都会想zookeeper申请一个临时节点,当一个申请成功的broker则选举称为Broker leader,剩余的broker叫做Broker follower,leader会监听其他follower的所有信息,如果这个leader宕机了,那么其他的follower则会重新向zookeeper申请临时节点,申请成功则变为leader,如果其中一个follower宕机,则leader会读取该follower的ISR中所有partition follower,并且选取其对应的一个replica作为partition继续使用,如果ISA中所有的replica都宕机了,那么就选取一个存活的replica当leader,如果所有的replica都宕机了,则将leader = -1 等待机器的恢复。
ISR(in-sync replica)
partition的leader会维护一个与其基本保持同步的一个replica表(副本表),即ISR,每个partition都有一个ISR表,只不过由leader进行维护。
当leader维护中发现一些replica滞后太多,则会将该replica移出ISR表,