需要消费多个Kafka Topic

Need to Consume Multiple Kafka Topics

我们创建了一个 .NET Worker.cs 来使用 kafka 主题。消费多个主题的最佳方式应该是什么?

我们的要求是有多个主题,有的每天都用,有的很少用。我们是否应该将很少使用的主题订阅给一个消费者,并将日常使用的主题分别订阅给每个消费者(因为他们的数据负载很重)。

Image to see the requirement architecture which we created

在此图中,TopicName(D) 显示日常使用的主题,TopicName(R) 显示很少使用的主题。

这是使用我们的 kafka 主题的最佳方式还是其他方式?

唯一的规则是你必须检查 Kafka 在消费多个主题时保证做什么和不保证什么:

  • Kafka 只保证单个 topic/partition 的消息顺序,这也意味着如果您的单个主题 Consumer 出于某种原因切换分区,您可能会得到乱序的消​​息。

  • 当您使用一个消费者订阅多个主题时,该消费者会为每个请求的主题分配一个 topic/partition 对。

  • 这意味着任何一个主题的传入消息顺序都是正确的,但您不能保证主题之间的顺序是按时间顺序排列的。

  • 您也不能保证您会在任何给定时间段内收到来自任何特定订阅主题的消息。

如果处理所有消息很重要,您需要确保每个消费者处理来自其所有订阅主题的消息的速度快于创建消息的速度。

如果不能,您要么需要更多消费者在同一组中提交读取,要么您必须接受某些消息可能永远不会被处理的事实。

显然一个 Consumer/topic 是最简单的,但它确实增加了一些开销来拥有额外的消费者。您必须根据您的需要确定这是否重要。

正确回答您的问题的唯一方法是评估您的应用程序的特定要求和功能,并在 Kafka 的限制范围内构建在 范围内工作的东西。