首页 文章

我可以在Kafka Broker的同一台机器上运行Kafka Streams应用程序吗?

提问于
浏览
2

我有一个Kafka Streams应用程序,它从几个主题中获取数据并加入数据并将其放入另一个主题中 .

Kafka 配置:

5 kafka brokers
Kafka Topics - 15 partitions and 3 replication factor.

Note: I am running Kafka Streams Applications on the same machines where my Kafka Brokers are running.

每小时消耗/ 生产环境 的数百万条记录 . 每当我关闭任何一个kafka经纪人时,它都会进入重新 balancer 状态并且需要大约 . 30分钟甚至更长时间用于重新 balancer ,很多时候它会杀死许多Kafka Streams流程 .

2 回答

  • 0

    从技术上讲,可以在与代理相同的服务器上运行Kafka Streams应用程序 . But it is not recommended. 两者都需要共享相同的资源,最终会产生争用 .

    每当我拿走任何一个kafka经纪人时,它就会重新 balancer

    不知道为什么会这样 . 您使用的是什么版本的Kafka或Streams API?如果您在经纪人0.10.1上,我强烈建议您将Streams应用程序升级到0.11(注意,您可以在没有经纪人升级的情况下执行此操作) .

    根据您要分阶段处理的问题的详细信息, StandbyTask 可能有助于延长重新 balancer 时间 . 您可以简单配置参数 num.standby.replica = 1 以启用 StandbyTask .

  • 0

    回答 Headers 中的问题:

    来自Spark / HDFS背景,我认为这是一种思维方式的改变,因为您习惯于认为将数据处理放在哪里,以利用数据局部性 . 在这里,代理将提供数据位置,但必须将数据发送到Kafka Streams集群进行处理(失去一些好处) . 但是,将它们分开可以让您分别管理两个集群 .

    如果您想到一个运行高延迟处理作业的集群,它共享数据处理(例如HDFS YARN集群),您可以获得“数据处理过程”而不是相反的过程 . 您可以为数据处理分配资源 - 但想法是您的处理不依赖于临时数据峰值(与Streaming一样),而是依赖于总数据量 . 如果您的数据增长,您的计算将花费更多,并且您可以分配更多资源,但它们会同时增长 . 但是,在流应用程序中,必要的处理能力确实取决于数据峰值(以及您的低延迟要求)而不是总数据量,因此存储和处理的尺寸和管理是分开的,因为它们的弹性要求不是基于相同的维度 .

    这与显而易见的事实不同,即同时拥有数据处理 - Kafka代理 - 和数据处理 - 同一节点中的Kafka Streams会将更多负载放入节点,但我们假设这在定义节点时已经考虑到了这一点 .

相关问题