ToB企服应用市场:ToB评测及商务社交产业平台
标题:
47、Flink 的 Data Source 原理
[打印本页]
作者:
用户云卷云舒
时间:
2024-6-15 00:46
标题:
47、Flink 的 Data Source 原理
1.Data Source 原理
a)焦点组件
一个数据 source 包括三个焦点组件:
分片(Splits)
、
分片枚举器(SplitEnumerator)
以及
源阅读器(SourceReader)
。
分片(Split)
是对一部分 source 数据的包装,如一个文件大概日志分区。分片是 source 举行使命分配和数据并行读取的根本粒度。
源阅读器(SourceReader)
会请求
分片
并举行处理,比方读取
分片
所表示的文件或日志分区。
SourceReader
在 TaskManagers 上的 SourceOperators 并行运行,并产生并行的变乱流/记载流。
分片枚举器(SplitEnumerator)
会天生
分片
并将它们分配给
SourceReader
。该组件在 JobManager 上以单并行度运行,负责对未分配的
分片
举行维护,并以平衡的方式将其分配给 reader。
Source 类作为API入口,将上述三个组件结合在了一起
。
b)流处理和批处理的同一
Data Source API 以同一的方式对无界流数据和有界批数据举行处理。
流处理和批处理区别很小
:在有界/批处理情况中,枚举器天生固定命量的分片,而且每个分片都必须是有限的;但在无界流的情况下,分片巨细可以不是有限的,大概枚举器将不断天生新的分片。
c)示例
展示在流和批处理情况下 data source 组件如何交互;以下内容并没有准确地描述出 Kafka 和 File source 的工作方式。
有界 File Source
Source 包含待读取目次的 URI/路径(Path),以及一个界说了如何对文件举行分析的
格式(Format)
。
分片
是一个文件,大概是文件的一个地区(如果该文件格式支持对文件举行拆分)。
SplitEnumerator
将会列举给定目次路径下的所有文件,并在收到来自 reader 的请求时对分片举行分配。一旦所有的分片都被分配完毕,则会使用
NoMoreSplits
来响应请求。
SourceReader
则会请求分片,读取所分配的分片(文件大概文件地区),并使用给定的格式举行分析。如果当前请求没有得到下一个分片,而是
NoMoreSplits
,则会终止使命。
无界 Streaming File Source
与**有界 File Source **类似,除了
SplitEnumerator
从不会使用
NoMoreSplits
来响应
SourceReader
的请求,并且还会定期列出给定 URI/路径下的文件来查抄是否有新文件;一旦发现新文件,则天生对应的新分片,并将它们分配给空闲的 SourceReader。
无界 Streaming Kafka Source
Source 将具有 Kafka Topic(亦大概一系列 Topics 大概通过正则表达式匹配的 Topic)以及一个
分析器(Deserializer)
来分析记载(record)。
分片
是一个 Kafka Topic Partition。
SplitEnumerator
会毗连到 broker 从而列举出已订阅的 Topics 中的所有 Topic Partitions。枚举器可以重复此操作以查抄是否有新的 Topics/Partitions。
SourceReader
使用 KafkaConsumer 读取所分配的分片(Topic Partition),并使用提供的
分析器
反序列化记载。由于流处理中分片(Topic Partition)巨细是无限的,因此 reader 永久无法读取到数据的尾部。
有界 Kafka Source
每个分片(Topic Partition)都会有一个预界说的结束偏移量,其他与上述类似;一旦
SourceReader
读取到分片的结束偏移量,整个分片的读取就会结束。而一旦所有所分配的分片读取结束,SourceReader 也就终止使命了。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4