【问题标题】:Can I run Kafka Streams Application on the same machine as of Kafka Broker?我可以在与 Kafka Broker 相同的机器上运行 Kafka Streams 应用程序吗?
【发布时间】:2018-02-20 21:57:34
【问题描述】:

我有一个 Kafka Streams 应用程序,它从几个主题中获取数据并将数据连接起来并将其放入另一个主题中。

卡夫卡配置:

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

注意:我在运行 Kafka 代理的机器上运行 Kafka Streams 应用程序。

每小时消耗/产生几百万条记录。每当我关闭任何 kafka 经纪人时,它都会进入重新平衡,大约需要。重新平衡需要 30 分钟甚至更长时间,而且很多时候它会杀死许多 Kafka Streams 进程。

【问题讨论】:

    标签: apache-kafka kafka-consumer-api kafka-producer-api apache-kafka-streams


    【解决方案1】:

    技术上可以在与代理相同的服务器上运行 Kafka Streams 应用程序。 但不建议这样做。两者都需要共享相同的资源,您最终会发生争用。

    每当我关闭任何 kafka 代理时,它都会进入重新平衡

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

    根据您正在分阶段解决的问题的详细信息,StandbyTask可能有助于延长重新平衡时间。您可以简单地配置参数num.standby.replica = 1来启用StandbyTasks。

    【讨论】:

    • 我只在 0.11 上运行 Kafka Stream 应用程序。 num.standby.replica 默认为 1。
    • 我的 Kafka 代理也在 0.11 上运行...我在这台机器上有 64gb 内存,我有 Kafka 代理、zookeeper + 15 个 Kafka 流应用程序在每台机器上运行。
    • 将使备用副本为 1。
    • 当您说您关闭代理时,您是指整个物理机器(即,包括在这台机器上运行的 Streams 应用程序的实例)还是仅代理本身?
    • 仅限 Kafka 代理
    【解决方案2】:

    回答标题中的问题:

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

    如果您想到一个运行高延迟处理作业、共享数据 + 处理的集群(例如 HDFS + YARN 集群),您可以得到“数据所在的进程”,而不是相反。您可以为您的数据处理分配资源 - 但想法是您的处理不依赖于临时数据峰值(就像它对流处理所做的那样),而是依赖于总数据量。如果您的数据增长,您的计算将花费更多,您可以分配更多资源,但它们会同时增长。但是,在流式应用程序中,必要的处理能力确实取决于数据峰值(和您的低延迟要求),而不是总数据量,因此存储和处理分别进行维度和管理是有意义的,因为它们的弹性需求不是基于相同的维度。

    这与一个明显的事实不同,即在同一节点中同时拥有数据处理 - Kafka 代理 - 和数据处理 - Kafka Streams 会给节点带来更多负载,但我们假设在确定您的维度时已考虑到这一点节点。

    【讨论】:

      猜你喜欢
      • 2021-03-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-09
      • 2021-04-14
      • 2018-07-17
      相关资源
      最近更新 更多