2017-11-25 111 views
2

我想了解如何动态地向外扩展应用程序,它消耗的话题(可惜我不能减少其数量 - 通过设计每个主题是特定类型的数据)的数量庞大。与200+卡夫卡的主题进行扩展后,

enter image description here

我想我的应用集群从所有的200个多种主题分担负载。例如,当一个新的应用程序节点添加到集群中时,它应该从旧节点“偷走”一些主题订阅,这样负载将再次均匀分布。

据我了解,卡夫卡partinions /消费群体帮助并行的话题,不共享多个主题之间的负载。

+2

能不能让所有的应用程序订阅所有的200个多种话题与一个正则表达式订阅?然后他们都可以在一个消费群体中 –

回答

1

您需要确保您的所有App实例使用相同的Kafka Consumer Group(通过group.id)。在这种情况下,你实际上拥有你想要的均匀分布。当添加新的应用程序实例时,消费者组将重新平衡并确保负载是分布式的。

而且,当创建一个新的话题/分区它会采取消费达人“metadata.max.age.ms”(默认为5分钟)开始从它消耗。确保将“auto.offset.reset”设置为“最早”以不会错过任何数据。

最后,你可能想使用正则表达式来订阅所有这些议题(如果可能)。

0

卡夫卡主题是一组类似类型的消息,所以您可能有200多种类型的消息已被200多种类型的消费者使用(即使一个消费者可能能够处理多种类型,逻辑上你有200多个不同的处理)。

卡夫卡分区是从一个主题并行化消息的消耗的方法。每个分区将由绑定到该主题的消费者组中的一个消费者完全消耗,因此为了理解分区功能,主题的分区总数需要至少与消费者组中的消费者数量相同。

所以在这里你将有200多个主题,每个都具有N个分区(其中N大于或等于应用您的预计最大数量),并且每个应用程序应该由所有的200个多种主题消费。消费者必须使用消费者组名称来标记自己,每个发布到主题的记录都会交付给每个订阅消费者组中的一个消费者实例。所有消费者都可以使用同一个消费群体。

Kafka documentation对于一个更好的解释...