我计划从Apache Kafka中读取数据并将其处理(可能需要耗费时间)处理后将数据保存到数据库的应用程序。我正在考虑将它插入Spark或Flink,但无法掌握这些规模:我的应用程序,当Spark/Flink的一部分,阅读一些内容时来自卡夫卡的数据,然后退出或继续阅读?使用Apache Spark/Apache Flink扩展
那么Spark/Flink如何决定他们必须产生更多的应用程序实例来提高吞吐量?
谢谢!
我计划从Apache Kafka中读取数据并将其处理(可能需要耗费时间)处理后将数据保存到数据库的应用程序。我正在考虑将它插入Spark或Flink,但无法掌握这些规模:我的应用程序,当Spark/Flink的一部分,阅读一些内容时来自卡夫卡的数据,然后退出或继续阅读?使用Apache Spark/Apache Flink扩展
那么Spark/Flink如何决定他们必须产生更多的应用程序实例来提高吞吐量?
谢谢!
在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。
谢谢,Ehab,我创建了一个通过cmdline中的“flink run”工作,但是我应该在每台服务器上运行它,还是Flink以某种方式处理'分发'这个工作? 我对作业的并行性感兴趣,而不是操作员,所以我想这可以通过任务插槽来解决? – estoy
@estoy您只需指定操作员的并行度,而Flink负责处理剩下的操作。程序代码被转换为链式子任务的数据流图。查看[这里](https://ci.apache.org/projects/flink/flink-docs-release-1.3/concepts/runtime.html)了解更多详情。通过增加工作的并行性,你的意思是什么? –
我想确保的是:一个文件发布到kafka->一个flink作业处理它。将两个文件发布到kafa->两个flink作业并行处理它们。没有第二个等待的第一个完成 – estoy
Spark有动态分配,它会创建新的执行者 - 据我所知 - microbatch持续时间将接近microbatch时间间隔 –
我是新来的这些 - 我的应用程序应该如何表现?它应该从卡夫卡只读一次并退出?如果队列中有更多的数据,Spark/Flink如何知道它需要创建新的作业来读取? – estoy
只需创建流式作业,Spark会自动缩放执行程序的数量 –