kafkastreams - 增加更多处理能力

时间:2016-08-17 15:55:37

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

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

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

随着数据速率的增加,如何增加KStream的容量? KStreams会自动处理吗?我是否会启动更多流程(ala Micro-services)?

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

1 个答案:

答案 0 :(得分:6)

  

我是否会推出更多流程(ala Micro-services)?

简短的回答是肯定的:

  • 答案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手动执行此操作。