大数据开发之如何处理Kafka集群消息积压问题

通常情况下,企业中会采取轮询或者随机的方式,通过Kafka的producer向Kafka集群生产数据,来尽可能保证Kafk分区之间的数据是均匀分布的。

在分区数据均匀分布的前提下,如果我们针对要处理的topic数据量等因素,设计出合理的Kafka分区数量。大数据培训对于一些实时任务,比如Spark Streaming/Structured-Streaming、Flink和Kafka集成的应用,消费端不存在长时间"挂掉"的情况即数据一直在持续被消费,那么一般不会产生Kafka数据积压的情况。

但是这些都是有前提的,当一些意外或者不合理的分区数设置情况的发生,积压问题就不可避免。

Kafka消息积压的典型场景:

1.实时/消费任务挂掉

比如,我们写的实时应用因为某种原因挂掉了,并且这个任务没有被监控程序监控发现通知相关负责人,负责人又没有写自动拉起任务的脚本进行重启。

那么在我们重新启动这个实时应用进行消费之前,这段时间的消息就会被滞后处理,如果数据量很大,可就不是简单重启应用直接消费就能解决的。

2.Kafka分区数设置的不合理(太少)和消费者"消费能力"不足

Kafka单分区生产消息的速度qps通常很高,如果消费者因为某些原因(比如受业务逻辑复杂度影响,消费时间会有所不同),就会出现消费滞后的情况。

此外,Kafka分区数是Kafka并行度调优的最小单元,如果Kafka分区数设置的太少,会影响Kafka consumer消费的吞吐量。

3.Kafka消息的key不均匀,导致分区间数据不均衡

在使用Kafka producer消息时,可以为消息指定key,但是要求key要均匀,否则会出现Kafka分区间数据不均衡。

那么,针对上述的情况,有什么好的办法处理数据积压呢?

一般情况下,针对性的解决办法有以下几种:

1.实时/消费任务挂掉导致的消费滞后

a.任务重新启动后直接消费最新的消息,对于"滞后"的历史数据采用离线程序进行"补漏"。

此外,建议将任务纳入监控体系,当任务出现问题时,及时通知相关负责人处理。当然任务重启脚本也是要有的,还要求实时框架异常处理能力要强,避免数据不规范导致的不能重新拉起任务。

b.任务启动从上次提交offset处开始消费处理

如果积压的数据量很大,需要增加任务的处理能力,比如增加资源,让任务能尽可能的快速消费处理,并赶上消费最新的消息

2.Kafka分区少了

如果数据量很大,合理的增加Kafka分区数是关键。如果利用的是Spark流和Kafka direct approach方式,也可以对KafkaRDD进行repartition重分区,增加并行度处理。

3.由于Kafka消息key设置的不合理,导致分区数据不均衡

可以在Kafka producer处,给key加随机后缀,使其均衡。

(0)

相关推荐

  • Kafka 会不会丢消息?

    一.认识 Kafka Kafka 是分布式发布-订阅消息系统.它最初由 LinkedIn 公司开发,之后成为 Apache 项目的一部分. Kafka 是一个分布式的,可划分的,冗余备份的持久性的日志 ...

  • 30分钟带你了解「消息中间件」Kafka、RocketMQ

    消息中间件的应用场景 主流 MQ 框架及对比 说明 Kafka 优点 Kafka 缺点 RocketMQ Pulsar 发展趋势 各公司发展 Kafka Kafka 是什么? Kafka 术语 Kaf ...

  • 在规模上使用Apache Kafka的20个最佳实践

    Apache Kafka是一种广受欢迎的分布式流媒体平台,New Relic,Uber和Square等数千家公司使用它来构建可扩展,高吞吐量,可靠的实时流媒体系统.例如,New Relic的生产Kaf ...

  • 曾经我以为我很懂Kafka,直到我看了这篇文章

    为什么需要消息队列 周末无聊刷着手机,某宝网APP突然蹦出来一条消息"为了回馈老客户,女朋友买一送一,活动仅限今天!".买一送一还有这种好事,那我可不能错过!忍不住立马点了去.于是 ...

  • Java分布式面试题集合

    (给ImportNew加星标,提高Java技能) 转自:乐知者, 链接:cnblogs.com/expiator/p/10201004.html 分布式分为分布式缓存(Redis).分布式锁(Redi ...

  • Kafka系列1:Kafka概况

    Kafka是当前分布式系统中最流行的消息中间件之一,凭借着其高吞吐量的设计,在日志收集系统和消息系统的应用场景中深得开发者喜爱.本篇就聊聊Kafka相关的一些知识点.主要包括以下内容: Kafka简介 ...

  • Kafka到底会不会丢消息

    目录1.kafka是什么一种高吞吐量的分布式.发布订阅消息系统,它可以处理消费者规模的,网站中的所有动作流数据,具有高性能.持久化.多副本备份.横向扩展能力--以时间复杂度为 O(1) 的方式提供消息 ...

  • 12个人工智能与大数据开发注意点

    人工智能是近年来科技发展的重要方向,在大数据时代,对数据采集.挖掘.应用的技术越来越受到瞩目.在人工智能和大数据的开发过程中,有哪些特别需要注意的要点? 人工智能领域的算法大师.华盛顿大学教授Pedr ...

  • 大数据开发面试必知必会的SQL 30题!!!

    原文链接: https://blog.csdn.net/weixin_45366499/article/details/116355430 作者: 一蓑烟雨任平生 (1)查询每个区域的用户数 (2)查 ...

  • 大数据开发语言怎么选?Scala 还是 Go

    介绍 自从我参与DevOps和大数据以来,我一直在使用两种出色的但完全不同的编程语言:Go和Scala. Scala是一种较旧且更成熟的编程语言,已在并发编程和大数据处理等领域找到了自己的定位. 另一 ...

  • 大数据开发面试之数据仓库

    数据仓库的定义? 首先,用于支持决策,面向分析型数据处理:其次,对多个异构的数据源有效集成,集成后按照主题进行重组,并包含历史数据,而且大数据培训存放在数据仓库中的数据一般不再修改. 数据仓库(Dat ...

  • 大数据开发技术之Spark SQL的多种使用方法

    Spark SQL支持多种数据源,如JDBC.HDFS.HBase.它的内部组件,如SQL的语法解析器.分析器等支持重定义进行扩展,能更好的满足不同的业务场景.与Spark Core无缝集成,提供了D ...

  • 大数据开发技术之Spark Job物理执行解析

    一个复杂 job 逻辑执行图: 代码贴在本章最后.给定这样一个复杂数据依赖图,如何合理划分 stage,并未确定 task 的类型和个数? 一个直观想法是将前后关联的 RDDs 组成一个 stage, ...

  • BigData:大数据开发的简介、核心知识(linux基础+Java/Python编程语言+Hadoop{HDFS、HBase、Hive}+Docker)、经典场景应用之详细攻略

    BigData:大数据开发的简介.核心知识(linux基础+Java/Python编程语言+Hadoop{HDFS.HBase.Hive}+Docker).经典场景应用之详细攻略 BigData:大数 ...

  • 大数据开发学习路线

    磨拳擦掌! 说数据是一个企业最核心的东西之一,我想大家应该都能基本认同吧,毕竟连XXX都说过,这是一个数据为王的时代,谁掌握了数据谁就掌握未来! 怪不得咱这里的小伙伴们个个都磨拳擦掌,都嚷嚷着想从事大 ...

  • 大数据开发Hive中 ORC 存储格式分析

    一.ORC File文件结构 ORC是列式存储,有多种文件压缩方式,并且有着很高的压缩比. 文件是可切分(Split)的.因此,在Hive中使用ORC作为表的文件存储格式,不仅节省HDFS存储资源,查 ...