我有一个kafka streams应用程序,它从几个主题中获取数据,并将数据合并到另一个主题中。
Kafka配置:
5 kafka brokers
Kafka Topics - 15 partitions and 3 replication factor.
注意:我在运行kafka代理的同一台机器上运行kafka流应用程序。
每小时消耗/产生几百万张唱片。每当我把任何Kafka经纪人,它进入再平衡,它需要大约30分钟,有时甚至更多的重新平衡,很多时候,它杀死了许多Kafka流进程。
我有一个kafka streams应用程序,它从几个主题中获取数据,并将数据合并到另一个主题中。
Kafka配置:
5 kafka brokers
Kafka Topics - 15 partitions and 3 replication factor.
注意:我在运行kafka代理的同一台机器上运行kafka流应用程序。
每小时消耗/产生几百万张唱片。每当我把任何Kafka经纪人,它进入再平衡,它需要大约30分钟,有时甚至更多的重新平衡,很多时候,它杀死了许多Kafka流进程。
2条答案
按热度按时间vddsk6oq1#
从技术上讲,可以在与代理相同的服务器上运行kafka streams应用程序。但不建议这样做。两者都需要共享相同的资源,最终会产生争用。
每当我让Kafka经纪人倒下时,它就会进入再平衡
不知道为什么会这样。您使用的是什么版本的kafka或streams api?如果您使用的是broker0.10.1+,我强烈建议您将streams应用程序升级到0.11(注意,您可以在不升级broker的情况下完成此操作)。
根据你要分阶段解决的问题的细节,
StandbyTask
可能有助于长时间的重新平衡。您可以简单地配置参数num.standby.replica = 1
启用StandbyTask
s。omhiaaxx2#
回答标题中的问题:
来自spark/hdfs的背景,我认为这是一种思维的改变,因为您习惯于认为在数据所在的位置进行处理是好的,可以利用数据的局部性。在这里,代理将提供数据位置,但必须将数据发送到kafka streams集群进行处理(失去一些好处)。但是,将它们分开允许您分别管理两个集群。
如果您想到一个运行高延迟处理作业、共享数据+处理的集群(例如hdfs+yarn集群),您可以得到“数据所在的进程”,而不是相反的结果。您可以为您的数据处理分配资源—但其思想是,您的处理不依赖于临时数据峰值(与流式处理一样),而是依赖于总数据量。如果您的数据增长,您的计算将花费更多的时间,您可以分配更多的资源,但它们将同时增长。但是,在流式应用程序中,必要的处理能力确实取决于数据峰值(以及您的低延迟要求),而不是取决于总的数据量,因此存储和处理是分开度量和管理的是有意义的,因为它们的弹性需求不是基于同一维度的。
这与一个明显的事实不同,即在同一个节点中同时使用数据处理(kafka代理)和数据处理(kafka流)会给节点带来更多的负载,但我们假设在确定节点尺寸时已经考虑到了这一点。