apache-kafka - 卡夫卡 : What is the minimum number of brokers required for high availability?

标签 apache-kafka high-availability kafka-cluster

假设我想在小型部署的生产环境中拥有高度可用的 Kafka。
我必须使用以下配置

min.insync.replicas=2 // Don't want to lose messages in case of 1 broker crash    
default.replication.factor=3 // Will let producer write in case of 1 replica disappear with broker crash

如果 1 个 broker 崩溃并且 1 个副本消失,Kafka 会开始制作新副本吗?

在任何情况下,我们是否必须至少有 default.replication.factor 数量的经纪人才能继续工作?

最佳答案

为了在 Kafka 中实现高可用性,您需要考虑以下因素:

1.复制因子 :默认情况下,复制因子设置为 1 .推荐replication-factor生产环境是 3这意味着 需要3个经纪人 .

2. 首选领导人选举 :当一个代理被关闭时,其中一个副本成为分区的新领导者。一旦失败的broker重新启动并运行,它就没有leader分区,Kafka恢复它在宕机时丢失的信息,它再次成为分区leader。默认情况下启用首选领导者选举。为了将切换回首选领导时丢失消息的风险降至最低,您需要设置生产者属性 acksall (显然,这是以性能为代价的)。

3.不洁领袖选举 :
您可以启用不干净的领导者选举,以允许不同步的副本成为领导者并保持分区的高可用性。对于不干净的领导者选举,未同步到新领导者的消息将丢失。一致性和高可用性之间存在权衡,这意味着在禁用不洁领导者选举的情况下,如果包含分区领导者副本的代理变得不可用,并且不存在同步副本来替换它,则该分区将不可用,直到领导者出现副本或另一个同步副本重新联机。

4. 致谢 :
确认是指在使用 acks 确认消息之前提交新消息的副本数。属性(property)。当 acks 设置为 0该消息会立即得到确认,而无需等待其他代理提交。设置为 1 时,一旦领导者提交消息,消息就会被确认。配置 acksall提供最高的一致性保证,但对集群的写入速度较慢。

5. 最小同步副本 :min.insync.replicas定义生产者必须可用的最小同步副本数才能成功地将消息发送到分区。如果 min.insync.replicas设置为 2acks设置为 all ,每条消息必须成功写入至少两个副本。这意味着消息不会丢失,除非两个代理都失败(不太可能)。如果其中一个代理失败,则该分区将不再可用于写入。同样,这是一致性和可用性之间的权衡。

关于apache-kafka - 卡夫卡 : What is the minimum number of brokers required for high availability?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53208811/

相关文章:

java - Kafka消费者-消费者进程和线程与主题分区的关系是什么

java - 卡夫卡 : Bounded Batch Processing in Parallel

spring-boot - Spring Batch 在集群环境中正确重启未完成的作业

apache-spark - Spark驱动器的高可用性

apache-kafka - 生产中的Kafka UI监控工具

spring-kafka 不能与 kafka-cluster 一起工作

java - 如何在同一线程中成功对第二个 Kafka 消费者执行轮询?

apache-kafka - kafka connect的debezium源连接器无法生产到kafka怎么办

mysql - 高可用性apache/mysql

apache-kafka - 在 Kafka HA 中,为什么需要的最少代理数量是 3 而不是 2