【问题标题】:kafkastreams - adding more processing capacitykafkastreams - 增加更多处理能力
【发布时间】:2016-08-17 15:55:36
【问题描述】:

我正在开发一个 POC,将现有的 Flink 应用程序/拓扑转换为使用 KafkaStreams。我的问题是关于部署的。

具体来说 - 在 Flink 中,将“工作节点”添加到 flink 安装中,然后在拓扑中添加更多并行化以跟上不断增长的数据速率。

随着数据速率的增加,如何增加 KStreams 的容量? KStreams 会自动处理这个吗?我会启动更多进程(ala 微服务)吗?

或者我在这里错过了大局?

【问题讨论】:

    标签: java apache-kafka apache-kafka-streams


    【解决方案1】:

    我会启动更多进程(ala 微服务)吗?

    简短的回答是肯定的:

    • 答案 1(增加容量):要横向扩展,您只需启动流处理应用程序的另一个实例,例如在另一台机器上。您的应用程序实例将相互了解并自动开始共享处理工作。这可以在实时操作期间完成,并且不会丢失数据!
    • 答案 2(移除容量):只需停止一个或多个正在运行的流处理应用程序实例,例如关闭 4 个正在运行的实例中的 2 个。您的应用程序的其余实例将意识到其他实例已停止并自动接管已停止实例的处理工作。这可以在实时操作期间完成,并且不会丢失数据!

    有关详细信息,请参阅http://docs.confluent.io/3.0.0/streams/developer-guide.html#elastic-scaling-of-your-application 上的 Kafka Streams 文档(不幸的是,Kafka Streams 上的 Apache Kafka 文档还没有这些详细信息)。

    或者我在这里错过了大局?

    大图是图片实际上又好又小。 :-)

    所以让我添加以下内容,因为我觉得许多用户对其他相关技术的复杂性感到困惑,然后并不真正期望您可以以更简单的方式进行流处理(包括其部署),就像你可以用 Kafka Streams 做的一样:

    Kafka Streams 应用程序是一个普通的、普通的旧 Java 应用程序,恰好使用 Kafka Streams 库。与现有流处理技术的一个关键区别在于,通过使用 Kafka Streams 库,您的应用程序变得可扩展、弹性、容错等,而无需像您想要的那样添加特殊的“处理集群”来添加机器为 Flink、Spark、Storm 等做。Kafka Streams 部署模型更加简单和容易:只需启动或停止应用程序的其他实例(即实际上相同的代码)。这基本上适用于任何与部署相关的工具,包括但不限于 Puppet、Ansible、Docker、Mesos、YARN。您甚至可以通过运行 java ... YourApp 手动执行此操作。

    【讨论】:

    • 所以他们像 flink/storm/etc 应用一样共享数据(用于聚合等)?
    • 另外 - 要让这个运行需要使用 Kafka 的 Confluent 版本/构建?
    • 应用程序实例不共享数据。我建议阅读文档以获得更好的理解。
    • 您可以使用 Confluent 平台(包括 Kafka)或库存的 Apache Kafka。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    相关资源
    最近更新 更多