1、相关名词:
- producer:生产者
- broker:kafka中间件节点,多个中间件节点组成kafka集群
- topic:主题,将kafka消息进行归类,消费者只会消费topic相同生产者产生的消息
- partition:物理上的概念(可以理解为消息队列),一个topic可以分配多个partition,每个partition内部是有序的
- consumer:消费者
- consumerGroup:消费者组(确保一个partition中的消息只被同一group中的一个consumer消费,避免重复消费)
- zookeeper:kafka通过zoopeeker管理集群配置
- HW:高水位,即:consumer最多能消费到的offset
- LEO:每个partition的log最后一条Message的位置
2、Partition的leader选举
Partition会跟zoopeeker保持心跳,一旦partition(leader)所在的broker挂掉,zoopeeker会收到消息,并通知leader的副本进行leader选举(个人理解是:谁先在zoopeeker上注册谁会成为leader)
3、kafka的partition副本同步机制
下图为kafka消息处理机制(图片引用:https://www.cnblogs.com/aidodoo/p/8873163.html,如对作者造成影响请告知,立马删除)
- 为保证消息写入leader之后,所有副本没能同步完成,leader就挂掉了重新选举leader之后,造成消息丢失,只有等所有副本完成消息同步之后消息才能被消费者消费(这就是为什么会设置HW与LEO的原因)
- 当然如果副本一直不能同步完成,leader也不会一直等下去,默认如果副本消息落后leader 10s就会将该folloer从ISR中剔除(即:放弃该follower)