2017-09-20 98 views
0

我计划从Apache Kafka中读取数据并将其处理(可能需要耗费时间)处理后将数据保存到数据库的应用程序。我正在考虑将它插入Spark或Flink,但无法掌握这些规模:我的应用程序,当Spark/Flink的一部分,阅读一些内容时来自卡夫卡的数据,然后退出或继续阅读?使用Apache Spark/Apache Flink扩展

那么Spark/Flink如何决定他们必须产生更多的应用程序实例来提高吞吐量?

谢谢!

+0

Spark有动态分配,它会创建新的执行者 - 据我所知 - microbatch持续时间将接近microbatch时间间隔 –

+0

我是新来的这些 - 我的应用程序应该如何表现?它应该从卡夫卡只读一次并退出?如果队列中有更多的数据,Spark/Flink如何知道它需要创建新的作业来读取? – estoy

+0

只需创建流式作业,Spark会自动缩放执行程序的数量 –

回答

1

在Apache Flink中,您可以通过将env.setParallelism(#parallelism)设置为使所有运算符与#parallelism并行实例一起运行来定义操作的并行性,或者甚至可以为每个运算符定义/覆盖它,例如dataStream.map(...).setParallelism(#parallelism);

For more info查看Flink文档https://ci.apache.org/projects/flink/flink-docs-release-1.3/dev/parallel.html

关于从KAFA读你可以定义并行接收器(同组),以扩大与卡夫卡主题分区/下:env.addSource(kafkaConsumer).setParallelism(#topicPartitions)

检查卡夫卡文档,了解有关卡夫卡的主题,分区和消费群更多的信息:https://kafka.apache.org/documentation/

请注意,如果您没有在Flink程序中指定并行性级别并将其部署在本地Flink群集中。将使用configs文件flinkDir/conf/flink-conf.yaml内的parallelism.default参数的值。除非您通过-p指定它,如./bin/flink run .... -p #parallelism。检查Flink cli options

+0

谢谢,Ehab,我创建了一个通过cmdline中的“flink run”工作,但是我应该在每台服务器上运行它,还是Flink以某种方式处理'分发'这个工作? 我对作业的并行性感兴趣,而不是操作员,所以我想这可以通过任务插槽来解决? – estoy

+0

@estoy您只需指定操作员的并行度,而Flink负责处理剩下的操作。程序代码被转换为链式子任务的数据流图。查看[这里](https://ci.apache.org/projects/flink/flink-docs-release-1.3/concepts/runtime.html)了解更多详情。通过增加工作的并行性,你的意思是什么? –

+0

我想确保的是:一个文件发布到kafka->一个flink作业处理它。将两个文件发布到kafa->两个flink作业并行处理它们。没有第二个等待的第一个完成 – estoy