47、Flink 的 Data Source 原理

打印 上一主题 下一主题

主题 555|帖子 555|积分 1665

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企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用户云卷云舒

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表