问题列表:
- 数据倾斜导致子任务挤压
- 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。
备注:
- 同样的数据、同样的Tps作为数据输入,Hbase的输出能力远超过Es,考虑实时任务落数据进Es要慎重
- Flink任务落Es时要考虑设置 微批 落数据,设置 bulk.flush.ma