如何处理生产环境中的数据倾斜问题?

这篇具有很好参考价值的文章主要介绍了如何处理生产环境中的数据倾斜问题?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

分析&回答

1、flink数据倾斜的表现:

任务节点频繁出现反压,增加并行度也不能解决问题

部分节点出现OOM异常,是因为大量的数据集中在某个节点上,导致该节点内存被爆,任务失败重启

2、数据倾斜产生的原因:

业务上有严重的数据热点,比如滴滴打车的订单数据中北京、上海等几个城市的订单量远远超过其他地区;

技术上大量使用了 KeyBy、GroupBy 等操作,错误的使用了分组 Key,人为产生数据热点。

3、解决问题的思路:

业务上要尽量避免热点 key 的设计,例如我们可以把北京、上海等热点城市分成不同的区域,并进行单独处理;

技术上出现热点时,要调整方案打散原来的 key,避免直接聚合;此外 Flink 还提供了大量的功能可以避免数据倾斜。

3、Flink 任务数据倾斜场景和解决方案

A、两阶段聚合解决 KeyBy 热点:

  • 首先把分组的 key 打散,比如加随机后缀;
  • 对打散后的数据进行聚合;
  • 把打散的 key 还原为真正的 key;
  • 二次 KeyBy 进行结果统计,然后输出。
DataStream sourceStream = ...;
resultStream = sourceStream
     .map(record -> {
        Record record = JSON.parseObject(record, Record.class);
        String type = record.getType();
        record.setType(type + "#" + new Random().nextInt(100));
        return record;
      })
      .keyBy(0)
      .window(TumblingEventTimeWindows.of(Time.minutes(1)))
      .aggregate(new CountAggregate())
      .map(count -> {
        String key = count.getKey.substring(0, count.getKey.indexOf("#"));
        return RecordCount(key,count.getCount);
      })
      //二次聚合
      .keyBy(0)
      .process(new CountProcessFunction);
resultStream.sink()...

env.execute()...
复制代码

B、GroupBy + Aggregation 分组聚合热点问题:

将SQL 拆成了内外两层,第一层通过随机打散 100 份的方式减少数据热点,当然这个打散的方式可以根据业务灵活指定。

select date,
       type,
       sum(pv) as pv
from(
  select
        date,
        type,
        sum(count) as pv
  from table
        group by
        date,
        type,
        floor(rand()*100) --随机打散成100份 
    )
    group by 
    date,
    type;
复制代码

C、Flink 消费 Kafka 上下游并行度不一致导致的数据倾斜

Flink 消费 Kafka 的数据时,是推荐上下游并行度保持一致,即 Kafka 的分区数等于 Flink Consumer 的并行度

但是会有一种情况,为了加快数据的处理速度,来设置 Flink 消费者的并行度大于 Kafka 的分区数。如果你不做任何的设置则会导致部分 Flink Consumer 线程永远消费不到数据。需要设置 Flink 的 Redistributing,也就是数据重分配

dataStream
        .setParallelism(2)
        // 采用REBALANCE分区策略重分区
        .rebalance() //.rescale()
        .print()
        .setParallelism(4);
复制代码
  • Rebalance 分区策略,数据会以 round-robin 的方式对数据进行再次分区,可以全局负载均衡。
  • Rescale 分区策略基于上下游的并行度,会将数据以循环的方式输出到下游的每个实例中

喵呜面试助手:一站式解决面试问题,你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!文章来源地址https://www.toymoban.com/news/detail-686209.html

到了这里,关于如何处理生产环境中的数据倾斜问题?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第十六章 Hive生产环境优化&数据倾斜解决方案

    Hive调优作用:在保证业务结果不变的前提下,降低资源的使用量,减少任务的执行时间。 1、调优须知 (1)对于大数据计算引擎来说:数据量大不是问题, 数据倾斜是个问题。 (2)Hive的复 杂HQL底层会转换成多个MapReduce Job并行或者串行执行 ,Job数比较多的作业运行效 率相

    2024年02月12日
    浏览(39)
  • 解决分类任务中数据倾斜问题

    大家好,在处理文本分类任务时,基准测试流行的自然语言处理架构的性能是建立对可用选项的理解的重要步骤。在这里,本文将深入探讨与分类相关的最常见的挑战之一——数据倾斜。如果你曾经将机器学习(ML)应用于真实世界的分类数据集,那么你可能已经很熟悉这个

    2024年02月16日
    浏览(80)
  • Spark数据倾斜问题分析和解决

    一、背景 首先需要掌握 Spark DAG、stage、task的相关概念 Spark的job、stage和task的机制论述 - 知乎 task数量和rdd 分区数相关 running task数=executor-core* num-executors (如果running task 没有达到乘积最大,一般是队列资源不足) https://www.cnblogs.com/muyue123/p/14036648.html 二、任务慢的原因分析 找到

    2024年02月03日
    浏览(77)
  • Redis 数据分布优化:如何应对数据倾斜?

    Redis 核心技术与实战 笔记 作者: 蒋德钧 在切片集群中,数据会按照一定的分布规则分散到不同的实例上保存。比如,在使用 Redis Cluster 或 Codis 时,数据都会先按照 CRC 算法的计算值对 Slot(逻辑槽)取模,同时,所有的 Slot 又会由运维管理员分配到不同的实例上。这样,数

    2024年02月11日
    浏览(35)
  • 浅析Redis集群数据倾斜问题及解决方法

    在服务端系统服务开发中,缓存是一种常用的技术,它可以提高系统对请求的处理效率,而redis又是缓存技术栈中的一个佼佼者,广泛的应用于各种服务系统中。在大型互联网服务中,每天需要处理的请求和存储的缓存数据都是海量的,在这些大型系统中,使用单实例的redi

    2024年02月07日
    浏览(33)
  • 数据库中的SQL是如何执行的?

    参考文献:03丨学会用数据库的方式思考SQL是如何执行的 以oracle和MySQL为例,讲解了sql是怎么被执行的,并且对比了执行过程中,oracle和MySQL的异同。 个人感觉,讲解的核心是SQL执行时的缓存机制。 自我口述一下 sql语句在提交后, 首先进行“语法检查”,检查sql语法是否正

    2024年02月09日
    浏览(47)
  • 如何解决Flink任务的数据倾斜

    如何解决flink任务的数据倾斜问题 Flink 任务的数据倾斜问题可以通过以下几种方法来解决: 使用滑动窗口:滑动窗口可以将窗口划分成多个子窗口,从而使数据更加均衡地分配到不同的计算节点中。同时,滑动窗口还可以使窗口内的数据更加连续,从而减少数据倾斜的情况。

    2024年02月14日
    浏览(42)
  • 【详解】Spark数据倾斜问题由基础到深入详解-完美理解-费元星

    数据倾斜定义:顾名思义,就是大量相似或相同数据聚集在一个块的节点里,导致计算和资源分配不均导致的计算缓慢(长尾)问题。 数据倾斜原因: count(distinct field) group by  NULL 空值 Shuffle (概率最高、发生最普遍的数据倾斜问题,本文重点讲述这个) ##########################

    2024年02月20日
    浏览(38)
  • 多云中的数据安全:如何保护敏感数据在分布式环境中的安全

    随着云计算技术的发展,多云已经成为企业和组织的主流选择。多云可以为企业提供更高的灵活性、可扩展性和竞争力。然而,多云环境也带来了新的挑战,尤其是在数据安全方面。在多云中,敏感数据的分布和管理变得更加复杂,数据安全的保障也更加重要。因此,保护敏

    2024年02月21日
    浏览(39)
  • 如何在CentOS安装SQL Server数据库并实现无公网ip环境远程连接

    简单几步实现在Linux centos环境下安装部署sql server数据库,并结合cpolar内网穿透工具,创建安全隧道将其映射到公网上,获取公网地址,实现在外异地远程连接家里/公司的sqlserver数据库,而无需公网IP,无需设置路由器,亦无需云服务器。 下载 SQL Server 2022 (16.x) Red Hat 存储库配

    2024年02月21日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包