【发布时间】:2018-12-04 16:45:18
【问题描述】:
成功写入 Kafka Broker 1 上的领导分区的消息会发生什么情况,并且 Broker 1 崩溃并稍后出现?
【问题讨论】:
标签: apache-kafka scalability messagebroker
成功写入 Kafka Broker 1 上的领导分区的消息会发生什么情况,并且 Broker 1 崩溃并稍后出现?
【问题讨论】:
标签: apache-kafka scalability messagebroker
如果它成功写入,那么只要代理启动,任何订阅该主题的消费者都可以使用这些消息。 引用官方文档:
在分布式系统术语中,我们仅尝试处理“故障/恢复”故障模型,其中节点突然停止工作,然后恢复(可能不知道它们已经死亡)。 Kafka 不处理所谓的“拜占庭”故障,即节点产生任意或恶意响应(可能是由于错误或犯规)。
如果您有多个代理,则分区的领导者将均匀分布在代理之间。更多来自文档:
我们现在可以更精确地定义,当该分区的所有同步副本都将消息应用到它们的日志时,该消息被视为已提交。只有提交的消息才会发送给消费者。这意味着消费者不必担心如果领导者失败,可能会看到可能丢失的消息。另一方面,生产者可以选择等待或不提交消息,这取决于他们对延迟和持久性之间权衡的偏好。此首选项由生产者使用的 acks 设置控制。请注意,主题具有同步副本的“最小数量”设置,当生产者请求确认消息已写入完整的同步副本集时,会检查该设置。如果生产者请求不那么严格的确认,则可以提交和消费消息,即使同步副本的数量低于最小值(例如,它可以低至仅领导者)。
Kafka 提供的保证是,只要始终有至少一个同步副本处于活动状态,提交的消息就不会丢失。
在短暂的故障转移期后,如果出现节点故障,Kafka 将保持可用,但在存在网络分区时可能无法保持可用。
要了解复制在 Kafka 中的工作原理,请访问 this 文档。
【讨论】: