Kafka 引入了 rack-id 以在整个机架出现故障时提供冗余功能。有一个最小同步副本设置来指定在生产者收到确认之前需要同步的最小副本数(-1 / 所有配置)。有一个不干净的leader选举设置来指定一个leader在不同步时是否可以被选举。
因此,鉴于以下场景:
旨在至少进行一次消息传递、节点冗余和对机架故障的容忍。
是否有可能在某个时刻两个同步副本都来自机架 1,因此生产者收到 ack 并且此时机架 1 崩溃(在机架 2 的任何副本同步之前)?这意味着机架 2 将只包含不干净的副本,并且没有生产者能够将消息添加到分区,基本上是停止。副本将是不干净的,因此在任何情况下都无法选出新的领导者。
我的分析是否正确,或者是否有什么东西可以确保形成最小同步副本的副本必须来自不同的机架?
由于同一机架上的副本具有较低的延迟,因此上述情况似乎是合理的。
该场景如下图所示:
apache-kafka ×1