首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要关于从Flink DataStream作业迁移到Flink状态函数3.1的建议

需要关于从Flink DataStream作业迁移到Flink状态函数3.1的建议
EN

Stack Overflow用户
提问于 2022-01-08 20:55:25
回答 1查看 226关注 0票数 0

我有一个工作Flink工作建立在Flink数据流上。我想根据Flink有状态函数3.1重写整个作业。

我目前工作的职能如下:

1

  1. 从Kafka
  2. 读取消息,每条消息的格式为数据包的一片,例如:
    • s-0,s-1用于数据包0
    • s-4,s-5,s-6用于分组

  1. 工作将切片合并成多个数据包,然后将分组汇到HBase
  2. 窗口函数中,以处理片到达

的无序问题。

我的目标

  • 目前我已经在我的k8s上运行了Flink状态函数演示。我想把关于有状态functions.
  • Save数据的整个工作重写为MinIO,而不是HBase

我目前的计划

我读过医生的书,并有了一些想法。我的计划是:

的关键原因

我的问题

我对我的计划没有信心。我的理解/计划有什么问题吗?

有什么最佳做法值得我参考吗?

更新:

使用windows来组装结果。

  1. 获取一个切片,检查其元数据,并知道它是数据包中的最后一个--
  2. 还知道,如果已经有10片,则数据包应该包含10片
  3. ,如果还没有足够的切片,则将它们合并为
  4. ,等待一段时间(例如10分钟),然后合并或记录数据包错误。

G 254

我想在重写的时候去掉窗户,但我不知道怎么做

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-10 19:11:34

背景:使用KeyedProcessFunctions而不是KeyedProcessFunctions组装相关事件

使用DataStream API,windows并不是将相关事件组装在一起的良好构建块。问题是,窗口的开始和结束是在与时钟一致的时候,而不是与事件对齐。因此,即使两个相关事件仅相隔几毫秒,它们也可能被分配到不同的窗口。

通常,用关键的过程函数来实现这种用例更加简单,并根据需要使用计时器来处理丢失或延迟的事件。

使用Statefun 实现了这一点。

您可以使用上面提到的相同的模式。函数id将扮演与键相同的角色,您可以使用延迟消息而不是计时器:

当每个切片到达时,将其添加到正在组装的数据包中,如果是第一个片,则将其添加到正在组装的数据包中,发送一个延迟消息,在所有的切片到达时作为超时

  • ,合并它们,如果延迟的消息在数据包完成之前到达,则发送数据包
  • ,执行适当的操作(例如,继续发送部分数据包)

F 213

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70636370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档