Flink常见问题及回答

问题一:

在设置容忍 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。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值