让我把它说出来,我是一个非常初学者的Flink,并试图抓住尽可能多的概念。
比方说,我有一个flink集群,其中包含10个任务管理器。我每个人都有一个flink作业在运行。作业也使用广播状态。该广播状态是通过每10分钟读取5个S3文件,进行一些处理,并创建播放的int to list of strings
地图来创建的。
问题:在哪里读取文件,是否在JobManager读取和处理文件,并将处理过的内容发送给任务管理人员。
或
是任务管理人员负责所有的读取和处理。如果是这种情况,那么flink如何确保如果任务管理器无法从S3读取,那么所有任务管理器的广播状态都是相同的。
编辑
因此,任务管理器读取广播流并将其广播到下游任务。
例如:假设有一个卡夫卡流,有5个分区,需要广播。还有一个下游操作符,它的并行性也是5。
问题:在这里,当我们从分区2元素设置广播状态时,我们是否需要确保我们没有覆盖分区1中的元素,或者flink本身来管理它。
或
此外,如何确保分区2消耗元素并设置广播状态时,分区1广播状态已达到分区2下游运算符任务。
发布于 2019-10-21 12:22:10
文件的读取发生在哪里?
TaskManager。JobManager只负责管理任务,比如调度和故障转移。
如何将处理过的内容发送给任务管理器?
您可以简单地将广播状态进程想象为向所有下游任务发送相同的消息,而不是发送到特定的任务。
如果任务管理器无法从S3读取,flink如何处理?
如果源任务无法从S3读取,我相信会重新启动(可能是完全重新启动或部分重新启动),检查点机制将确保状态的一致性。
广播状态在所有任务管理器上都是相同的。
实际上,在所有任务中,广播状态并不完全相同。原因是在网络传输过程中,不能保证以相同的顺序将事件传递给任务。
https://stackoverflow.com/questions/58485558
复制相似问题