今天,我想讨论一个关于Flink的概念性话题,而不是一个技术性话题。
在我们的例子中,我们确实有两个Kafka主题A和B,需要连接。连接应该始终包括主题A中的所有元素,以及主题B中的所有新元素。实现这一点有两种可能:始终创建一个新的使用者并从一开始就开始使用主题A,或者在使用后将主题A中的所有元素保持在一个状态内。现在,技术方法是通过连接两个数据流,这很快就向我们展示了它在这个用例中的局限性,因为没有窗口就不可能连接流(很公平)。主题A中的元素最终会丢失,如果窗口继续移动,我感觉定期重置consumer将绕过Flink引入的复杂逻辑。
然而,我的问题是:在深入研究表API之前,我只注意到有一个更优雅的方法,我想确定一下,这是这个问题的最佳解决方案,还是有一个更合适的Flink概念,我不知道?
编辑:我忘了提一下:我们不使用POJO,而是保持它的泛型,这意味着传入的数据被标识为tuple2
,其中k,v
每个都是genericrecord
的一个实例。序列化/反序列化的相应架构是在运行时从架构注册表中获取的。我不知道,在这种情况下,SQL结构会在多大程度上成为瓶颈。此外,文档两个表必须具有不同的字段名
中的这句话让我有点怀疑,因为我们确实具有相同的字段名,我们将不得不以某种方式处理这些字段,而不需要很大的变通方法。
如果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++资源有代码而
在我的情况下,有可能,例如,一个新的设备被启动,因此必须处理另一个流。但是如何动态添加这个新流呢?