一致性
幂等性
保证在消息重发的时候,消费者不会重复处理。即使在消费者收到重复消息的时候,重复处理,也
要保证最终结果的一致性。所谓幂等性,数学概念就是: f(f(x)) = f(x)
如何实现?
添加唯一ID,类似于数据库的主键,用于唯一标记一个消息。
ProducerID:#在每个新的Producer初始化时,会被分配一个唯一的PID
SequenceNumber:#对于每个PID发送数据的每个Topic都对应一个从0开始单调递增的SN值
- 使用 Zookeeper 的分布式锁选举控制器,并在节点加入集群或退出集群时通知控制器。
- 控制器负责在节点加入或离开集群时进行分区Leader选举。
- 控制器使用epoch
忽略小的纪元来避免脑裂:两个节点同时认为自己是当前的控制器。
如何选举
可用性
- 创建Topic的时候可以指定 --replication-factor 3 ,表示不超过broker的副本数
- 只有Leader是负责读写的节点,Follower定期地到Leader上Pull数据。
- ISR是Leader负责维护的与其保持同步的Replica列表,即当前活跃的副本列表。如果一个Follow落后太多,Leader会将它从ISR中移除。选举时优先从ISR中挑选Follower。
- 设置 acks=all 。Leader收到了ISR中所有Replica的ACK,才向Producer发送ACK。
- [ 萱儿AXW ]