为了在 Kafka 中启用高可用性,您需要考虑以下因素:
1. 复制因子:默认情况下,复制因子设置为1
。推荐replication-factor
用于生产环境,3
这意味着需要3 个代理。
2. Preferred Leader Election:当一个broker被关闭时,其中一个副本成为分区的新leader。一旦发生故障的代理重新启动并运行,它就没有领导分区,Kafka 会恢复它在关闭时丢失的信息,并再次成为分区领导。默认情况下启用首选领导者选举。为了将切换回首选领导者时丢失消息的风险降到最低,您需要将生产者属性设置acks
为all
(显然这是以性能为代价的)。
3. Unclean Leader Election:您可以启用不干净的Leader Election,以允许不同步的副本成为Leader并保持分区的高可用性。使用不干净的领导者选举,未同步到新领导者的消息会丢失。在一致性和高可用性之间进行权衡,这意味着在禁用不干净的领导者选举的情况下,如果包含分区领导者副本的代理不可用,并且不存在同步副本来替换它,则该分区将不可用,直到领导者副本或另一个同步副本重新联机。
4. 确认acks
:确认是指在使用属性确认消息之前提交新消息的副本数。当 acks 设置为0
消息时立即确认,而无需等待其他代理提交。当设置为 时1
,一旦领导者提交消息,消息就会被确认。配置acks
为all
提供最高的一致性保证,但对集群的写入速度较慢。
5. 最小同步副本数:min.insync.replicas
定义了生产者必须可用的最小同步副本数,以便成功地将消息发送到分区min.insync.replicas
。如果设置为2
并acks
设置为all
,则必须成功写入每条消息到至少两个副本。这意味着消息不会丢失,除非两个代理都失败(不太可能)。如果其中一个代理失败,则该分区将不再可用于写入。同样,这是一致性和可用性之间的权衡。