我对Apache Kafka中的主题分区感到有点困惑。所以我正在绘制一个简单的用例,我想知道在不同场景中会发生什么。所以这就是:
我有一个主题T,它有4个分区TP1,TP2,TP4和TP4。
假设我有8条消息M1到M8。现在,当我的生产者将这些消息发送到主题T时,Kafka经纪人将在以下情况下如何收到这些消息:
场景1:只有一个kafka代理实例具有上述分区的主题T.
场景2:有两个kafka代理实例,每个节点与前面提到的分区具有相同的主题T.
现在假设kafka经纪人实例1出现故障,消费者将如何反应?我假设我的消费者正在从经纪人实例1中读取。
答案 0 :(得分:4)
我将引导您完成分区复制,因为您需要了解复制以了解答案。
单个经纪人被视为"领导者"对于给定的分区。所有产品和消费都与领导者一起发生。分区的副本将复制到可配置数量的其他代理。领导者处理将产品复制到其他复制品。追赶领导者的其他复制品称为"同步复制品。"您可以配置"赶上"装置
只有当消费者提交到所有同步副本时,才会向消息提供消息。
如果给定分区的领导者失败,Kafka协调员将从同步副本列表中选出一个新的领导者,消费者将开始从这个新领导者消费。当新领导人当选时,消费者将有几毫秒的额外延迟。如果协调器发生故障,也会自动选择新的协调器(这也会增加延迟)。
如果主题配置为没有副本,那么当给定分区的领导者失败时,消费者无法从该分区消费,直到作为领导者的代理重新联机。或者,如果它永远不会重新联机,那么先前生成到该分区的数据将永远丢失。
直接回答您的问题:
2
您可能也有兴趣了解制作人中的acks
。
在制作人中,您可以配置acks
,以便在以下时间确认作品:
acks=0
)acks=1
)acks=all
)此外,您可以配置提交产品所需的最小同步内副本数。然后,如果在给定此配置的情况下没有足够的同步副本,则产品将失败。您可以构建生成器以不同方式处理此故障:缓冲,重试,不执行任何操作,阻止等等。