【问题标题】:How to deploy Kafka Streaming Application on Kafka Cluster如何在 Kafka 集群上部署 Kafka 流应用程序
【发布时间】:2017-12-02 15:32:29
【问题描述】:

我编写了 Kafka Streaming 应用程序,我想将它部署在 Kafka 集群上。所以我构建了一个jar文件并使用命令运行它:

 java -jar KafkaProcessing-1.0-SNAPSHOT-jar-with-dependencies.jar testTopic kafka1:9092,kafka2:9092 zookeeper1:2181,zookeeper2:2181 output

它运行正确,但作业正在我上面运行命令的机器上运行!我想当我指定BOOTSTRAP-SERVERS 时,它会自动在集群上进行计算,而不是在主机上!

所以我的问题是如何在 kafka 集群上提交 Kafka 流式作业? 就像 Spark 和 Flink 提供了命令 spark-submitflink run 在集群上部署应用程序。

【问题讨论】:

    标签: apache-kafka apache-kafka-streams


    【解决方案1】:

    Kafka 流具有不同的架构——它不需要像 Spark/Flink 那样的集群编排——它们只是普通的应用程序,你可以启动和停止,如果你启动——它们会被放大,如果你停止它们会缩小.在内部,他们使用 Kafka 来协调数据处理,与其他 Kafka 消费者类似。

    如果您有 Kubernetes、Docker Swarm 或其他类似平台,那么您可以将您的应用打包到 Docker 中,并使用该平台运行您的 Kafka Streams 应用。

    【讨论】:

    • 那么Kafka Streaming不是并行处理引擎?
    • 它允许并行处理数据,但它不同......你可以增加实例内的线程数,但它们将执行相同的代码。更详细的解释见stackoverflow.com/questions/39985048/…
    • 参见confluent.io/blog/elastic-scaling-in-kafka-streams 了解有关弹性缩放的一些详细信息。简而言之:只需运行应用程序的多个实例。需要 5 倍的处理能力?运行 5 个实例。需要 10 倍?运行 10 个实例。等等。 Kafka Streams 优于 Spark、Flink 和 Storm 的一个优势是您可以在实时操作期间更改并行度(无需停机)——您可以在应用程序运行时添加/删除实例以添加/删除处理能力。
    【解决方案2】:

    在我的组织中,我们正在使用 kafka 流应用程序。我们已经探索了这种在服务器上部署的选项。根本不提供此设施。无论您在哪里运行,您都只能选择运行 kafka 流应用程序。尚无作业提交选项。

    【讨论】:

    • 那么我们如何设置并行级别。它是否设计为并行运行?
    • 到目前为止,我们有不同的机器并行运行并运行流。你也可以这样下去。
    • 您是指其他流处理引擎,例如 Flink 和 Storm?
    • 并行级别:Kafka Streams 的工作方式与 Storm 或 Flink 等需要您运行 Storm 或 Flink 处理集群的处理框架不同(并且更容易)。使用 Kafka Streams 库,您可以构建普通的 Java/Scala/... 应用程序。即便如此,您的应用程序将是弹性的、可扩展的、分布式的、容错的等。请参阅confluent.io/blog/elastic-scaling-in-kafka-streams 了解更多详细信息,例如弹性缩放。简而言之:只需运行应用程序的多个实例。需要 5 倍的处理能力?运行 5 个实例。需要 10 倍?运行 10 个实例。以此类推。
    猜你喜欢
    • 1970-01-01
    • 2018-09-04
    • 2022-01-20
    • 2021-10-24
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    相关资源
    最近更新 更多