如何实现?
添加唯一ID,类似于数据库的主键,用于唯一标记一个消息。
ProducerID:#在每个新的Producer初始化时,会被分配一个唯一的PIDSequencEnumber:#对于每个PID发送数据的每个Topic都对应一个从0开始单调递增的SN值![](https://cdn.nlark.com/yuque/0/2024/png/22811459/1714392887000-c72909f4-1914-462e-ae89-11ea197d72eb.png?x-oss-process=image%2Fwatermark%2Ctype_d3F5LW1pY3JvaGVp%2Csize_22%2Ctext_5Zu-54G16K--5aCC%2Ccolor_FFFFFF%2Cshadow_50%2Ct_80%2Cg_se%2Cx_10%2Cy_10%2Fformat%2Cwebp%2Fresize%2Cw_774%2Climit_0)
![](https://cdn.nlark.com/yuque/0/2024/png/22811459/1714392887000-c72909f4-1914-462e-ae89-11ea197d72eb.png?x-oss-process=image%2Fwatermark%2Ctype_d3F5LW1pY3JvaGVp%2Csize_22%2Ctext_5Zu-54G16K--5aCC%2Ccolor_FFFFFF%2Cshadow_50%2Ct_80%2Cg_se%2Cx_10%2Cy_10%2Fformat%2Cwebp%2Fresize%2Cw_774%2Climit_0)
如何选举
1.使用 Zookeeper 的分布式锁选举控制器,并在节点加入集群或退出集群时通知控制器。
2.控制器负责在节点加入或离开集群时进行分区Leader选举。
3.控制器使用epoch忽略小的纪元来避免脑裂:两个节点同时认为自己是当前的控制器。
![](/images/780-200-2.jpg)