2016-01-13 138 views
0

我对Apache Kafka中的Topic分区有点困惑。所以我正在绘制一个简单的用例,我想知道在不同场景下会发生什么。所以这里是:Apache Kafka主题分区消息处理

我有一个主题T有4个分区TP1,TP2,TP4和TP4。

假设我有8条消息M1到M8。现在,当我的制作人将这些消息发送到主题T时,在以下情况下,他们将如何被卡夫卡经纪人接收:

情况1:只有一个卡夫卡经纪人实例具有前述分区的主题T.

场景2:有两个kafka代理实例,每个节点具有与上述分区相同的Topic T。

现在假设卡夫卡经纪人实例1出现故障,消费者将如何反应?我假设我的消费者正在从经纪人实例1阅读。

回答

2

我会通过分区复制来回答您的问题,因为您需要了解复制以了解答案。

单个代理被认为是给定分区的“领导者”。所有的产品和消费与领导者一起发生。分区的副本被复制到可配置数量的其他代理。领导处理将产品复制到其他副本。其他追溯到领导者的复制品称为“同步复制品”。您可以配置“追上”的含义。

消息在提交给所有同步副本时才会提供给消费者。

如果给定分区的领导失败,卡夫卡协调员将从同步复制列表中选出一位新领导,消费者将开始从这位新领导消费。消费者在新领导人当选时会有几毫秒的附加延迟。如果协调员失败,新的协调员也会自动选出(这也增加了更多的延迟)。

如果该主题配置了没有副本,那么当给定分区的领导失败时,消费者无法从该分区消费,直到作为领导的代理重新联机为止。或者,如果它永远不会恢复到在线状态,那么以前生成到该分区的数据将永远丢失。

直接回答你的问题:

  • 方案1:如果复制配置为话题,并且存在一个同步副本为每个分区,新领军者年会选举产生,而消费者由于失败,将仅经历几毫秒的延迟。
  • 方案2:现在你了解复制,我相信你会看到这个场景是方案12复制的因素。

您可能也有兴趣了解在生产约acks

在生产中,可以配置acks这样当产品被确认:

  • 消息被提上了制片人的socket缓冲区(acks=0
  • 消息被写入日志的铅经纪人(acks=1
  • 消息被写入到日志引线经纪人,并复制到所有其他在同步副本(acks=all

此外,您可以配置提交产品所需的最小数量的同步副本。然后,如果在此配置下没有足够的同步副本,则产品将失败。你可以建立你的制片人以不同的方式处理这个失败:缓冲,重试,什么也不做,阻止等等。

相关问题