开发者社区> 问答> 正文

Flink keyby问题

Flink程序接入kafka源进行处理。
对流使用keyby分流,当流量大时,会发生反压,即使流量并没有很大。
但单独把keyby去掉后,就能够顶住很大的流量。
keyby的值使用UUID进行测试的,有正常进行分流。
keyby是否会对吞吐造成影响?该如何解决?

展开
收起
Assassinxc 2019-04-09 09:38:56 7545 0
3 条回答
写回答
取消 提交回答
  • 求知若饥 虚心若愚

    我们生产的时候,按照 业务 逻辑 比如 电商 店铺 进行key by 之后,进行 窗口 process 计算,我们发现 key by 的维度越细,任务就越不稳定,并且我们发现 每个 key 都有属于自己的process context ,这里就会造成很大的 flink 内部的内存占用,以及效率问题。 key by 的 逻辑很重要,尤其是 有使用状态后端 的场景 。 所以个人认为 key by 的列 最好是根据你 的任务的 并行度来进行设计 ,key by 的作用应该是对数据进行路由操作, 将数据均匀的发往 下游的 operator , 粒度不能太细,容易造成上面的问题,也不能太粗,容易数据倾斜。

    2020-12-03 15:34:02
    赞同 展开评论 打赏
  • keyby会导致shuffle,shuffle会导致Task之间的数据交换,这都是有额外的序列化、反序列化以及I/O开销的,所以keyby肯定会影响吞吐,具体影响程度要看单条数据的大小;这个是Flink的固有机制,没有解

    2019-11-21 17:14:00
    赞同 展开评论 打赏
  • keyby后,数据会根据key值发往下游的operator。建议你看下graph中哪个task产生了反压,是不是和IO相关。

    2019-07-17 23:32:52
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Flink CDC Meetup PPT - 龚中强 立即下载
Flink CDC Meetup PPT - 王赫 立即下载
Flink CDC Meetup PPT - 覃立辉 立即下载