问题一:
在设置容忍 checkpoint失败次数是0(通过该方法设置environment.getCheckpointConfig().setTolerableCheckpointFailureNumber(0);),重启策略为固定延时重启,重启 100次。
按照源码的理解,设置以上参数之后,如果出现checkpoint 失败,job也会失败,但是经过测试发现,checkpoint连续失败多次,程序还在运行,不知道是什么原因导致容忍 checkpoint 失败次数这个设置没有生效?
【回答】
请参照 fink 社区 user 邮件列表里相关的回答:
http://apache-flink-user-mailing-list-archive.2336050.n4.nabble.com/Making-iob-fail-on-Checkpoint-Expired-td34051.html
目前只有checkpoint declined会被认作continuousFailureCounter
问题二:
在程序消费 kafka,sink 到 kudu 时,由于受到写入kudu 速率的影响,flink程序反压,导致程序消费kafka 也会变慢。这个怎么解决?
【回答】
反压的目的就是要解决读入的数据比写出的数据快太多的问题,因此在这里应该需要解决的是写 Kudu 慢的问题。
问题三:
在用到 keyedstate 时,该状态与 key 绑定,假如设置客户账号为key,那每一个客户都会有一个状态,因为保存状态消耗内存,所以需要有合理的清理状态的动作。
有两种方式清理过期状态,一种设置 ttl,另一种写定时器,但各有利弊。①设置t简便,但是ttl的清理过期状态的策略是当该算子接收到与状态相同 key 的数据时,通过比较时间差是否为过期状态来判断是否清理该状态。
这种情况是,有多少客户账号,就会保存多少状态:最终导致 oom,该方法是不是不适合 key 值过多的状态清理?②)通过定时器可以自定义清理策略,但是定时器的注册本身就消耗资源,因此不适合定时器清理时间内有过多key,就像设置 key 为客户账号的话,如果定时器过期时间设为一天,那么这一天所有账号都会有一个定时器,导致消耗资源过大。这种情况只能通过减小过期时间来应对?比如设置 2分钟。
除此之外,对于 key 数据量过大的情况,有什么更好的清理策略吗?(注:客户号一天会有几百万到上千万不等,目前最多9千万)
【回答】
1、可选择使用 rocksdb 作为 statebackend,可减少内存压力。
2、tt1是有支持后台定期清理的功能,实际的操作可能类似第二种 case。但如果是 rocksdb 则有支持在compaction 的时候做清理的功能
3、可通过一些加入 iitter 来错开不同 key 的定时器触发时间
问题四:
消费 kafka,设置并行度的时候,如果 kafka 分区数是1,并行度只能设置成1比较合适吗?能不能将某些算子并行度不设置成 1?
【回答】
Kafka Consumer 的算子并行度设置成 1,其他算子可以依需求随意调整,通过分区类型的算子分发到下游算子。
问题五:
Flink 和 confluent schema registry 如何结合实现表结构变更无感。需要提供代码样例。
【回答】
目前 Cloudera Streaming Analytics 不支持 ConfluentSchema Registry,可以使用Cloudera Schema Registry,具体集成方法可以参考《F1ink 集成与使用案例》
问题六:
Flink 多张动态表实现表关联且不丢失数据,如何避免迟到数据丢失。提供解决方案及代码样例,如涉及内存调整,请给出内存规划。
【回答】
Flink Table API& SOL 目前不支持迟到数据的处理
问题七:
之前出现过一个数据量与内存矛盾的问题,比如有一个程序,设置等待时间为 30 分钟,数据超过 30分钟没到达就被丢弃,设置等待时间过长则有可能由于数据量太大导致 oom 的问题,这个怎么解决?
【回答】
建议使用 flink state api来存这个数据。因为 state api可以选择 rocksdb 作为 state backend,所以存储空间的上限就取决于 rocksdb 配置路径的磁盘空间。如果使用window fumction api,可以看看是否可以优化一下,如果计算可以做增量计算,可以只保密 intermediate data。
问题八:
如何使用 Flink 消费 Kafka 实现全局有序?
【回答】
只能通过设定并行度1来实现,但是效率会很差。
问题九:
Flink 读取和写入 hive on hbase 表报错,是否有解决方案?
【回答】
目前 Flink 不支持读写 Hive on HBase 表。
问题十:
Flink Kafka Producer 开启事务模式后,写入Kafka 之后的 ofset 不连续。产生此现象的原因是什么,有什么避免方案吗?
【回答】
Flink Kafka Producer用的是 native Kafka API,问题跟 Kafka 有关,类似的说明是 Kafka 并没有保证 offset -定的连续,只有保证递增。
问题十一:
Flink 能不能提供 remote function 的部署方式,使得这样算子的计算可以和 Flink iob的运行解耦?(即负责计算逻辑的 UDF 和负责提供算力的 Flink 集群是分开的,Flink 节点可以远程调用这些 UDF,这种模式下,可以做到改动 UDF,但是 Flink iob不需要改动的效果。
【回答】
StateFun 应该可以实现这样的部署,但目前也只是部分支持已有 UDF 的动态更新,不支持动态新增 UDF。请查看以下链接:
https://github.com/ververica/flink-statefun-workshophttps://ci.apache.org/projects/flink/flink-statefun-docs-release-2.2/concepts/distributed architecture.html
另外需要注意的是,CSA 目前不支持 StateFun。