问题一:请问一下Flink,我进行双流join之后,为什么右表的数据没有了啊?
请问一下Flink,我进行双流join之后,为什么右表的数据没有了啊? 正常应该是有数据能匹配上的,是我有什么配置没有配吗?在sql里这个配置能更改吗?
参考回答:
超过了这个时间没数据更新,右边就会匹配不到,state有默认存储时间的.这个是不好的,state时间越长,状态越大,推荐维表join,双流join推荐的是双方数据在默认的ttl内都有更新过来,如果你的维表数据不大,flink 1.18 SQL中可以对不同流的的ttl设置存储时间.你的flink如果不是1.18 ,推荐用维表join,维表join是根据a表的时间去实时去数据库拿取,当然你也可以设置缓存
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/571644
问题二:Flink 为什么这里映射的端口不是6123?
Flink kubernetes.hostnetwork.enabled=true为什么这里映射的端口不是6123
然后造成taskmanager和jobmanager通信超时 任务自动cancel 有大佬了解吗?
正常应该会被识别到port才对
参考回答:
在Flink中,6123是默认的RPC端口,用于集群间的通信。然而,在某些情况下,用户可能会选择更改这个端口,例如为了避免与其他服务的端口冲突。
此外,还有一些其他的端口可能在Flink集群中使用,包括但不限于:
- JobManager Web UI端口:默认为8081,用于展示Flink集群的状态和任务信息。
- TaskManager DataPort端口:默认为6121,用于TaskManager接收和发送数据流。
- ZooKeeper端口:默认为2181,用于协调Flink集群的状态和配置。
因此,在使用Flink时,需要关注各个组件使用的端口,并确保它们不会发生冲突。如果遇到端口冲突的问题,可以尝试通过修改Flink的配置文件来更改端口设置。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/571643
问题三:flink在standalone模式下任务失败任务太多次,这个问题有解决方案么?
flink在standalone模式下任务失败任务太多次,会导致jobmanager的jvm heap内存不断增加,这个问题有解决方案么?
参考回答:
Flink在Standalone模式下,如果任务失败次数过多,确实有可能导致JobManager的JVM堆内存不断增加。这种情况可能是由于某些TaskManager上的Task数增多,导致这些TaskManager的负载加重,从而影响了JobManager的内存管理。
为了解决这个问题,您可以考虑以下建议:
- 调整TaskManager的内存分配:根据任务的实际需求,可以适当增加或减少TaskManager的内存分配,确保其能够正常运行并处理任务。
- 调整JobManager的内存分配:同样,您也可以调整JobManager的内存分配,以确保它能够有效地管理和调度任务。
- 监控和诊断:定期检查Flink集群的运行状态和日志,特别是在出现异常情况时。使用工具如jstat来获取GC的信息,这可以帮助您发现和解决元空间占用飙升、频繁GC等问题。
- 优化任务逻辑:检查并优化您的Flink任务逻辑,确保它们不会因为某些错误或异常情况而频繁失败。
- 使用Systemd管理Flink:考虑使用Linux自带的Systemd方式管理JobManager和TaskManager的启停,这样在它们出现故障时,可以及时将它们拉起来。
总之,要解决Flink在Standalone模式下因任务失败导致的内存问题,需要从多个方面进行考虑和调整,确保集群的稳定性和高效运行。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/571642
问题四:github上的flink没有issue吗?
github上的flink没有issue吗?
参考回答:
https://issues.apache.org/jira/projects/FLINK/issues/
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/571640
问题五:请问下有个Flink场景,我有两个不同数据类型的topic:a,b,这个有人遇到过吗?
请问下有个Flink场景,我有两个不同数据类型的topic:a,b,他们分别又有相同数据类型的后缀为_grey的灰度用的topic: a_grey,b_grey
a_grey和b_grey分别是用来对应a,b进行灰度切换的,灰度流程是先灰度部分数据,后面全量切换,a -> a_grey, b -> b_grey,下一次灰度就是b_grey -> b, a_grey -> a。
我会用datastream api,去拉取a,a_grey进行union,withTimestampAssigner,使用事件时间戳
用datastream api,去拉取b,b_grey进行unionr,使用事件时间戳
然后去将union之后的stream转换为table,a_union_table和b_union_table 然后用flink sql进行left interval join,a_union_table left interval join b_union_table,获取数据再转为stream,用stream api进行mapper操作,最后写入数据库。
a,a_grey,b,b_grey都有8个分区,
a和a_grey会发送到所有的8个分区有数据
但是b,b_grey,只会发送到里面四个分区,其他四个分区没有数据
现在的问题是每次灰度全量切换完成之后,flink的水印就会推进不了,停留在切换的kafka数据时间戳附近,推进不了,请问下,这个有人遇到过吗?是什么原因,可以怎么解决?flink 1.17.1和1.14.5都不行
我尝试过withIdleness,或者不用withTimestampAssigner,但是在下次切换的时候又出这种问题了
参考回答:
将b的source算子并行度设置为1,再通过map算子扩展为8个分区,再进行后面的watermark设置,开窗,jion操作。
这要找到withidleness失效的原因,理论上不会出现这种问题,只要你给4个source都设置了withidleness,那要么一直有问题,要么一直没问题,不会说灰度一下就有问题了。
解决的思路是,你不是有的并行度没数据吗,那我就在source这设置1个并行度,然后再分给多个并行度(随便怎么分,总之要保证eventtime均匀),这样这多个并行度的算子中就不会出现某一个没数据了。这个思路还是不如withidleness的方法好,eventtime均匀不是一个永远成立的条件。
不要在datasource那添加watermark,在后面重开一个map算子,再添加watermark试试
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/571639