kafka千万级数据积压原因以及解决方案

这篇具有很好参考价值的文章主要介绍了kafka千万级数据积压原因以及解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、原因

kafka作为消息队列,其中数据积压也是经常遇到的问题之一。

我们都知道,数据积压的直接原因,一定是系统中的某个部分出现了性能问题,来不及处理上游发送的数据,才会导致数据积压。

那么我们就需要分析在使用kafka时,如何通过优化代码以及参数配置来最大程度的避免数据积压来对业务中的影响。

二、解决方案

1.1、通过优化代码

数据积压可能是我们在编写代码处理逻辑的时候,代码质量不高,处理速度慢导致消费数据的性能低,可以优化代码。

1.2、优化kafka配置参数

1.2.1、优化生产者producer的参数

首先我们在上面分析得出,是由于上游生产者producer发送数据过快,以及下游消费者consumer拉取数据过慢,实质上就是,生产者生产数据速度>>消费者消费数据速度。那么就可以把问题定位到生产者producer以及消费者consumer这两方面上。

可以通过修改以下参数配置提提升生产者的吞吐量:

1)batch.memory修改缓冲区大小

设置发送消息的缓冲区,默认值是33554432,就是32MB

如果发送消息出去的速度小于写入消息进去的速度,就会导致缓冲区写满,此时生产消息就会阻塞住,所以说这里就应该多做一些压测,尽可能保证说这块缓冲区不会被写满导致生产行为被阻塞住。

2)compression.type压缩格式

默认是none,不压缩,但是也可以使用lz4压缩,效率还是不错的,压缩之后可以减小数据量,提升吞吐量,但是会加大producer端的cpu开销。

3)batch.size批次大小

设置merge batch合并批次消息的大小

如果 batch 批次太小,会导致频繁网络请求,吞吐量下降;

如果batch批次太大,会导致一条消息需要等待很久才能被发送出去,而且会让内存缓冲区有很大压力,过多数据缓冲在内存里。

默认值是:16384,就是16kb,也就是一个batch批次满了16kb就发送出去,一般在实际生产环境,这个batch批次的值可以增大一些来提升吞吐量,可以自己压测一下。

4)linger.ms等待时长

这个值默认是0,意思就是消息必须立即被发送,但是这是不对的。

一般设置一个100毫秒之类的,这样的话就是说,这个消息被发送出去后进入一个batch批次,如果100毫秒内,这个batch批次满了16kb,自然就会发送出去。

但是如果100毫秒内,batch没满,那么也必须把消息发送出去了,不能让消息的发送延迟时间太长,也避免给内存造成过大的一个压力。

1.2.2、优化消费者cousumer

扩容,扩分区;增加consumer文章来源地址https://www.toymoban.com/news/detail-652636.html

1)提升消费者组中的消费者数以及Topic中的分区数,让二者相等,假设设置为3个分区 = 3CPU。
什么是分区?
分区就是一个topic的数据被分成多少份的单元,比如一个topic的数据被分成3份,那么就是3个分区,一个分区对应一份的数据。而每个分区中的写入的数据是有顺序的,分区之间数据是无序。

2)提高消费者拉取数据的能力,比如Flume每次拉取的数据可以由1000条改为3000条、Spark中将限流的参数增大、Flink中保证数据的处理效率等。

到了这里,关于kafka千万级数据积压原因以及解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 带你了解RabbitMQ:消息丢失、重复、积压的原因及其解决方案

    前言 首先说一点,企业中最常用的实际上既不是RocketMQ,也不是Kafka,而是RabbitMQ。 RocketMQ很强大,但主要是阿里推广自己的云产品而开源出来的一款消息队列,其实中小企业用RocketMQ的没有想象中那么多。 深层次的原因在于兔宝在中小企业普及更早,经受的考验也更久,很容

    2024年02月04日
    浏览(24)
  • MySQL千万级数据查询的优化技巧及思路

    随着数据量的不断增长,MySQL千万级数据查询的优化问题也日益引人注目。在这篇文章中,我们将深入探讨MySQL千万级数据查询优化的方法和技巧,以帮助开发者更好地优化MySQL性能。 数据库设计是优化查询性能的关键,以下是一些可用的技巧: 垂直拆分和水平拆分 垂直拆分

    2024年02月10日
    浏览(32)
  • 千万级数据深分页查询SQL性能优化实践

    如何在Mysql中实现上亿数据的遍历查询?先来介绍一下系统主角:关注系统,主要是维护京东用户和业务对象之前的关注关系;并对外提供各种关系查询,比如查询用户的关注商品或店铺列表,查询用户是否关注了某个商品或店铺等。但是最近接到了一个新需求,要求提供查

    2024年02月11日
    浏览(46)
  • Java中处理千万级数据的最佳实践:性能优化指南

    在今天的数字化时代,处理大规模数据已经成为许多Java应用程序的核心任务。无论您是构建数据分析工具、实现实时监控系统,还是处理大规模日志文件,性能优化都是确保应用程序能够高效运行的关键因素。本指南将介绍一系列最佳实践,帮助您在处理千万级数据时提高

    2024年02月03日
    浏览(36)
  • 千万级数据的表,我把慢sql优化后性能提升30倍!

    背景:系统中有一个统计页面加载特别慢,前端设置的40s超时时间都加载不出来数据,因为是个统计页面,基本上一猜就知道是mysql的语句有问题,遗留了很久没有解决,正好趁不忙的时候,下定决心一定把它给搞定! (mysql5.7) 执行一下问题sql,可以看到单表查就需要61s 这

    2024年02月14日
    浏览(36)
  • 千万级并发架构下,如何进行关系型数据库的分库分表

    最近项目上线后由于用户量的剧增,导致数据库的数据量剧增,随之而来的就是海量数据存储的问题,针对最近解决数据的优化过程,谈谈sql语句的优化以及数据库分库分表的方案。 建议大家先阅读一下数据库的优化方案 《数据库大数据量的优化方案》,里面从 1.优化现有数

    2024年02月16日
    浏览(35)
  • 阿里二面:千万级、亿级数据,如何性能优化? 教科书级 答案来了

    在尼恩指导了几百个小伙伴的面试,在这些过程中, 非常、非常高频的一个面试题: 千万级数据,如何做性能优化? 亿级数据,如何做性能优化? 最近,有个小伙伴阿里二面,又遇到了这个问题。 其实,尼恩一直想梳理一个教科书式的答案, 但是由于千万级数据、亿级数

    2024年02月02日
    浏览(34)
  • Kafka顺序消费以及消息积压问题

    什么场景下需要顺序消费? 比如说:订单有很多状态,比如:下单(未支付)、完成(已支付)、撤销等,不可能下单的消息都没读取到,就先读取支付或撤销的消息吧,要保证消息顺序消费 如何保证顺序消费? kafka的topic是无序的,但是一个topic包含多个partition, 每个pa

    2024年04月29日
    浏览(30)
  • Kafka数据丢失原因及解决方案

    Kafka包括Producer、Broker、Consumer,因此从这三个方面分析。 丢失原因:Kafka在Producer端的消息发送采用的是异步发送的方式(还有同步发送,但是同步发送会导致消息阻塞、需要等待),丢失数据是因为消息没有到达Broker端,原因可能是网络波动导致没有回调和数据消息太大超出

    2024年02月14日
    浏览(20)
  • 权威答案!灵犀医疗引入 Zilliz Cloud,千万级向量数据库赋能医学 AIGC 平台

    “医疗行业是一个信息差较大的行业,术语体系庞杂且知识门类较多,如何能搜索到最精准的医学知识并采用最合理方式进行总结,这是我们医学 AIGC 平台 EviMed 所遇见的最主要的技术问题。 传统的数据库和全文检索方式难以满足我们的技术要求,结合了 Zilliz Cloud 向量数据

    2024年04月25日
    浏览(22)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包