当前位置: 首页 > 知识库问答 >
问题:

在Flink中加入静态和动态Kafka源

荆梓
2023-03-14

今天,我想讨论一个关于Flink的概念性话题,而不是一个技术性话题。

在我们的例子中,我们确实有两个Kafka主题A和B,需要连接。连接应该始终包括主题A中的所有元素,以及主题B中的所有新元素。实现这一点有两种可能:始终创建一个新的使用者并从一开始就开始使用主题A,或者在使用后将主题A中的所有元素保持在一个状态内。现在,技术方法是通过连接两个数据流,这很快就向我们展示了它在这个用例中的局限性,因为没有窗口就不可能连接流(很公平)。主题A中的元素最终会丢失,如果窗口继续移动,我感觉定期重置consumer将绕过Flink引入的复杂逻辑。

然而,我的问题是:在深入研究表API之前,我只注意到有一个更优雅的方法,我想确定一下,这是这个问题的最佳解决方案,还是有一个更合适的Flink概念,我不知道?

编辑:我忘了提一下:我们不使用POJO,而是保持它的泛型,这意味着传入的数据被标识为tuple2 ,其中k,v每个都是genericrecord的一个实例。序列化/反序列化的相应架构是在运行时从架构注册表中获取的。我不知道,在这种情况下,SQL结构会在多大程度上成为瓶颈。此外,文档两个表必须具有不同的字段名中的这句话让我有点怀疑,因为我们确实具有相同的字段名,我们将不得不以某种方式处理这些字段,而不需要很大的变通方法。

共有1个答案

谭毅然
2023-03-14

如果A是真正静态的,那么如果您能够以某种方式完全摄取A(进入闪烁状态或进入内存),然后流B经过A--从而产生连接结果而不必存储B--则成本会较低。

使用Flink至少有几种方法可以实现这一点。一个在本答案中描述,另一个涉及使用状态处理器API。

使用第二种方法,您将持有一个处于键分区状态的Flink状态。通过使用状态处理器API,您可以引导包含所需状态的保存点,这样,通过从该保存点启动作业,a就已经完全加载并立即可用。

在不使用表API的情况下实现联接的另一种方法是使用RichCoFlatMapFunction或KeyedCoProcessFunction滚动您自己的联接。您将在Flink培训中找到这方面的示例。这些示例没有一个真正符合您的需求,但它们给出了一般的味道。但是,我看不出这样做有什么好处--如果您要执行完全动态/动态连接,不妨使用表API。

 类似资料:
  • 我们正在使用多个Kafka主题,但希望优先考虑其中一些主题(~服务质量)。 根据我在网上找到的,共识是不要限制运算符,而是限制源,更具体地说是反序列化器[1]。 我们如何访问源中有关流媒体环境状态的信息(即主题落后于当前偏移量的程度)。 目前,我们计划将我们的整个设置转换为CoFlatMaps[2],并拥有一个控制流,该控制流为所有主题发出当前偏移滞后-低优先级流运算符,然后根据高优先级流的滞后H

  • 我想将一系列尝试加入到一个静态的阻止电子邮件列表中,并按IP对结果进行分组,以便稍后统计一组相关的统计数据。结果应在每10秒后以30分钟的滑动窗口交付。以下是我尝试实现这一目标的几种方法之一: 这使用下面的用户定义的表函数,该函数已在my tableEnv中注册为BlockedEmailList: 但是,它返回以下错误: 如果我按照建议执行并将创建的时间戳转换为时间戳,我会得到以下结果: 我在这里

  • 一个机器或语言是用来计算的,根据计算机模型的定义,其操作的是存储器里的数据,就现在流行的用二进制实现的计算机中(曾出现过三进制计算机),数据本质都是0和1,但机器毕竟是为人服务的,解决的是现实问题,它操作的数据需要有现实的含义,所以基本上所有语言都有类型系统,即便是汇编和机器语言,也有整数和浮点的区别 类型系统是很复杂的理论,值得用一本厚书来写,好点的资料有《类型与程序设计语言》,但我没看懂,因为

  • 请有人给我解释一下输出的最后6行是如何打印出来的。我知道,由于静态绑定,前三行打印适当。 我不知道为什么第5行给出了输出,因为它是Ipod类型的,它没有任何歌曲方法,但它仍然打印输出。代码如下: 输出如下所示:

  • CGO在使用C/C++资源的时候一般有三种形式:直接使用源码;链接静态库;链接动态库。直接使用源码就是在import "C"之前的注释部分包含C代码,或者在当前包中包含C/C++源文件。链接静态库和动态库的方式比较类似,都是通过在LDFLAGS选项指定要链接的库方式链接。本节我们主要关注在CGO中如何使用静态库和动态库相关的问题。 2.9.1 使用C静态库 如果CGO中引入的C/C++资源有代码而

  • 问题内容: 我对动态绑定和静态绑定感到非常困惑。我已经读过,在编译时确定对象的类型称为静态绑定,而在运行时确定它的称为动态绑定。 下面的代码会发生什么: 静态绑定还是动态绑定? 这表明什么样的多态性? 问题答案: 您的示例是 动态绑定 ,因为在运行时确定类型是什么,并调用适当的方法。 现在假设您也具有以下两种方法: 即使您更改为 这将打印出来,因为对的调用使用 静态绑定 ,并且编译器仅知道其类型。