Flink生产环境遇到的问题

问题列表:

  • 数据倾斜导致子任务挤压
  • Kafka 消息大小默认配置太小,导致数据未处理
  • Tps 很大,Kafka Ack 默认配置 拖慢消息处理速度

数据倾斜导致子任务挤压

1. 业务背景:

一个流程中,有两个重要子任务:一是数据迁移,将kafka实时数据落Es,二是将kafka数据做窗口聚合落hbase,两个子任务接的是同一个Topic GroupId。

上游 Topic 的 tps 高峰达到5-6w

2. 问题描述

给 24个 TaskManager(CPU) 都会出现来不及消费的情况

3. 问题原因

做窗口聚合的任务的分组字段,分组粒度太小,hash不能打散,数据倾斜严重,导致少数 TaskManager 上压力过大,从而影响落Es的效率,导致背压。
在这里插入图片描述

4. 解决方式

将两个任务独立开来,作为不同的流程。

5. 结果

修改之前 24个 TaskManager(CPU) 来不及消费,改完之后 20 个 CPU 可完成任务。

Kafka实时数据落Es的16个TaskManager,将kafka数据做窗口聚合落hbase的4个TaskManager。

备注:

  1. 同样的数据、同样的Tps作为数据输入,Hbase的输出能力远超过Es,考虑实时任务落数据进Es要慎重
  2. Flink任务落Es时要考虑设置 微批 落数据,设置 bulk.flush.max.actions 和 bulk.flush.interval.ms
    至合适值,否则影响吞吐量。

Kafka 消息大小默认配置太小,导致数据未处理

1. 业务背景:

正常的Flink任务消费 Topic 数据,但是Topic中的数据为 XML 以及 JSON,单条数据较大

2. 问题描述

Flink各项metrics指标正常,但是没处理到数据

3. 问题原因

Topic中单条数据 > 1M,超过 Kafka Consumer 处理单条数据的默认最大值

4. 解决方式

有三种可选方式:

  1. 扩大kafka consumer 单条数据的数据大小:fetch.message.max.bytes
  2. 对消息进行压缩:上游 kafka producer 设置 compression.codec 和 commpressed.topics
  3. 业务上对数据切片,在上游 kafka producer 端将数据切片为 10K,使用分区主键确保同一条数据发送到同一Partition,consumer对消息重组

5. 结果

方式一:按业务要求扩大 Kafka Consumer 可处理的单条数据字节数即可正常处理业务
方式二: Kafka Consumer 需先解码,再进行业务处理。
方式三: Kafka Consumer 需先重组数据,再进行业务处理。

备注:关于 Kafka 配置消息大小 可参考: https://www.cnblogs.com/doubletree/p/4264969.html


Tps 很大,Kafka Ack 默认配置 拖慢消息处理速度

1. 业务背景:

实时任务,上游接流量页面点击事件的数据,下游输出Kafka,输出tps很大。

流量数据不重要,可接受丢失的情况

2. 问题描述

CPU资源耗费较多的情况下,才能正常消费,考虑如果缩减资源。

3. 问题原因

Kafka Producer 默认 acks=1,即Partition Leader接收到消息而且写入本地磁盘了,就认为成功了

4. 解决方式

Kafka Producer 设置 :props.put(“acks”, “0”);

将 acks=0,即KafkaProducer在客户端,只要把消息发送出去,不管那条数据有没有在哪怕Partition Leader上落到磁盘,直接就认为这个消息发送成功了。

5. 结果

资源降低三分之一

备注:关于 Kafka Acks 机制: https://www.jianshu.com/p/d5cd34e429a2

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值