2016-08-17 26 views
3

IM在一个POC转换现有弗林克应用/拓扑工作使用KafkaStreams。我的问题是关于部署。kafkastreams - 加入更多的处理能力

特别是 - 在Flink中,向flink安装添加了“工作者节点”,然后向拓扑添加更多并行化以跟上日益增长的数据速率。

随着数据速率的增加,人们如何增加KStream容量? KStreams是否自动处理?我是否启动更多流程(ala微服务)?

还是我错过了这里的大图?

回答

6

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

简短的回答是肯定的:

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

看到卡夫卡流文件在http://docs.confluent.io/3.0.0/streams/developer-guide.html#elastic-scaling-of-your-application进一步的细节(遗憾的是卡夫卡流Apache的卡夫卡文档没有这些细节还没有)。

还是我错过了这里的大图?

大的图片是,图片其实很好,很小。 :-)

因此,让我添加以下内容,因为我觉得很多用户被其他相关技术的复杂性所困惑,然后并不真正期望您可以在一个流中执行流处理(包括其部署)更简单的方法,就像你可以用Kafka Streams做什么:

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

+0

因此,他们共享数据(聚合等),如flink /风暴/等应用程序? – ethrbunny

+0

另外 - 为了实现这个运行,需要使用Kafka的Confluent版本/版本? – ethrbunny

+0

应用程序实例不共享数据。我建议阅读文档以获得更好的理解。 –