我对Apache Kafka中的Topic分区有些困惑。因此,我正在制定一个简单的用例,我想知道在不同情况下会发生什么。所以这里是:
我有一个主题T,它具有4个分区TP1,TP2,TP4和TP4。
假设我有8条消息M1至M8。现在,当我的生产者将这些消息发送到主题T时,在以下情况下,Kafka经纪人将如何接收它们:
方案1:只有一个带有主题T和上述分区的kafka代理实例。
方案2:有两个kafka代理实例,每个节点具有相同的Topic T,并且具有上述分区。
现在假设kafka经纪人实例1出现故障,那么消费者将如何反应?我假设我的消费者正在从代理实例1中读取内容。
我将通过逐步进行分区复制来回答您的问题,因为您需要了解复制才能理解答案。
单个经纪人被视为给定分区的“领导者”。所有生产和消费都与领导者一起发生。分区的副本将复制到可配置数量的其他代理。负责人负责将产品复制到其他副本。追随领导者的其他副本称为“同步副本”。您可以配置“追赶”的含义。
仅在将消息提交到所有同步副本后,该消息才对使用者可用。
如果给定分区的领导者失败,则Kafka协调员将从同步副本列表中选择一个新领导者,并且使用者将开始使用该新领导者进行消费。当新领导人被选出时,消费者将有几毫秒的延迟。如果协调器失败,也会自动选择一个新的协调器(这也会增加更多的延迟)。
如果主题配置为没有副本,则当给定分区的领导者发生故障时,除非作为领导者的代理重新联机,否则消费者无法从该分区进行消费。或者,如果永不恢复联机,以前生成到该分区的数据将永远丢失。
要直接回答您的问题:
2
。您可能也有兴趣acks
在制作人中了解。
在生产者中,您可以配置acks
为在以下情况下确认生产:
acks=0
)acks=1
)acks=all
)此外,您可以配置提交产品所需的最少同步副本数。然后,如果在使用此配置的情况下不存在足够的同步副本,则生产将失败。您可以构建生产者以不同方式处理此故障:缓冲,重试,不执行任何操作,阻止等。
归档时间: |
|
查看次数: |
1245 次 |
最近记录: |