“坏邻居”导致的kafka生产者TPS下降原因排查

这篇具有很好参考价值的文章主要介绍了“坏邻居”导致的kafka生产者TPS下降原因排查。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景:

今天测试了两种不同的场景下kafka producer的tps性能数据,两种场景下都是使用3个线程,每个线程都是对应一个kafka producer,测试发送到kafka集群的消息的量,两个场景的区别是场景A只发送kafka消息,场景B是除了发送kafka消息之外,还使用logback记录日志(异步模式),但是得到的发送到kafka集群的消息的量相差较大,大概20%,本文就记录下造成kafka消息发送的tps相差较大的原因

追查原因:

一.还原下测试场景

首先说明下场景A和场景B的压测环境,
“坏邻居”导致的kafka生产者TPS下降原因排查,kafka,java性能,kafka,分布式

服务器:两个场景都是使用12核12G的容器进行测试的
消息大小: 两个场景使用的消息大小都是1k,logback记录到日志中的文本大小也是1k
kafka producer 数量: 两者都是3个生产者,分别对应3个发送消息的线程

最终压测的结果:
场景A也就是只有发送消息到kafka的TPS为80000,而场景B也就是既发送消息到kafka,也是用logback日志落盘的场景TPS为58000,两者相差将近1/3的TPS,

二.分析场景

gc影响: 场景A和场景B压测过程中的gc次数都差不多,总的gc停顿时间都差不多,都没有明显的gc停顿

cpu:在整个压测的过程中场景A的CPU使用率是60%,也就是使用到了12核 * 0.6 = 7.2核,场景B的cpu使用率是100%,也就是使用到了12核 * 1.0 = 12核

分析整个过程中的cpu火焰图,发现场景A中发送kafka消息的Run方法占用的cpu为40%,而场景B中发送kafka消息的Run方法占用的cpu为17%,也就是说场景A中总共使用的cpu核心=7.2核 * 0.4=2.9核,而场景B中总共使用的cpu核心=12核 * 0.17=2.1核,

是不是大概看出了问题所在?

场景A中每个核心发送的kafka消息的TPS为:80000/2.9核心 = 26600,而场景B中每核心发送kafka消息的TPS为:58000/2.1核心 = 27600

这两个场景中归结到每个cpu核上的TPS几乎是差不多的,所以问题也就明显了,场景B中cpu资源不足,也就是logback等模块占用了不少的cpu的资源,导致消耗在发送kafka消息上的cpu资源少了

总结:

1.从这个问题的查找可以得出一个结论,当对两个场景进行压测时,最好不要让cpu跑满100%,因为这样会限制对应场景能获得的cpu的资源,压测的结果就明显受限于cpu。

2.当我们进行压测时,压测的场景要尽量符合真实的场景,因为真实场景下有很多“坏邻居”,比如这里的场景B的logback模块,他们有可能对要压测的指标有很负面的影响.文章来源地址https://www.toymoban.com/news/detail-556860.html

到了这里,关于“坏邻居”导致的kafka生产者TPS下降原因排查的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Kafka(生产者)

    目 前 企 业 中 比 较 常 见 的 消 息 队 列 产 品 主 要 有 Kafka(在大数据场景主要采用 Kafka 作为消息队列。) ActiveMQ RabbitMQ RocketMQ 1.1.1 传统消息队列的应用场景 传统的消息队列的主要应用场景包括: 缓存/消峰 、 解耦 和 异步通信 。 缓冲/消峰: 有助于控制和优化数据流经过

    2024年02月11日
    浏览(46)
  • Kafka 生产者

    目录 一、kafka生产者原理 二、kafka异步发送 配置kafka 创建对象,发送数据 带回调函数的异步发送 同步发送   三、kafka生产者分区 分区策略 指定分区:  指定key: 什么都不指定: 自定义分区器 四、生产者提高吞吐量 五、数据的可靠性 ACK应答级别 数据完全可靠条件 可靠性

    2023年04月15日
    浏览(45)
  • (三)Kafka 生产者

    创建一个 ProducerRecord 对象,需要包含目标主题和要发送的内容,还可以指定键、分区、时间戳或标头。 在发送 ProducerRecord 对象时,生产者需要先把键和值对象序列化成字节数组,这样才能在网络上传输。 如果没有显式地指定分区,那么数据将被传给分区器。分区器通常会基

    2024年02月09日
    浏览(40)
  • 「Kafka」生产者篇

    在消息发送的过程中,涉及到了 两个线程 —— main 线程 和 Sender 线程 。 在 main 线程中创建了 一个 双端队列 RecordAccumulator 。 main线程将消息发送给RecordAccumulator,Sender线程不断从 RecordAccumulator 中拉取消息发送到 Kafka Broker。 main线程创建 Producer 对象,调用 send 函数发送消息,

    2024年01月19日
    浏览(42)
  • 三、Kafka生产者

    1 发送原理 在消息发送的过程中,涉及到了两个线程——main 线程和 Sender 线程。在 main 线程中创建了一个双端队列 RecordAccumulator。main 线程将消息发送给 RecordAccumulator,Sender 线程不断从 RecordAccumulator 中拉取消息发送到 Kafka Broker 【RecordAccumulator缓冲的结构: 每一个分区对应一

    2024年02月12日
    浏览(40)
  • kafka学习-生产者

    目录 1、消息生产流程 2、生产者常见参数配置 3、序列化器 基本概念 自定义序列化器 4、分区器 默认分区规则 自定义分区器 5、生产者拦截器 作用 自定义拦截器 6、生产者原理解析 在Kafka中保存的数据都是字节数组。 消息发送前,需要将消息序列化为字节数组进行发送。

    2024年02月09日
    浏览(39)
  • Kafka生产者相关概念

    Kafka中消息是以topic进行分类的,Producer生产消息,Consumer消费消息,都是面向topic的。 Topic是逻辑上的概念,Partition是物理上的概念,每个Partition对应着一个log文件,该log文件中存储的就是producer生产的数据。 写入方式 producer采用推(push)模式将消息发布到broker,每条消息都

    2024年04月13日
    浏览(35)
  • 【Kafka】高级特性:生产者

    整个流程如下: Producer创建时,会创建一个Sender线程并设置为守护线程。 生产消息时,内部其实是异步流程;生产的消息先经过拦截器-序列化器-分区器,然后将消息缓存在缓冲区(该缓冲区也是在Producer创建时创建)。 批次发送的条件为:缓冲区数据大小达到batch.size或者

    2024年01月24日
    浏览(35)
  • Apache Kafka - 重识Kafka生产者

    Kafka 生产者是 Apache Kafka 中的一个重要组件,它负责将数据发送到 Kafka 集群中。在实时数据处理和流式处理应用程序中,Kafka 生产者扮演着非常重要的角色。 这里我们将介绍 Kafka 生产者的概念、工作原理以及如何使用 Kafka 生产者。 Kafka 生产者是一种用于将数据发送到 Kafk

    2024年02月05日
    浏览(42)
  • [kafka消息生产被阻塞] - 如何解决Kafka生产者阻塞的问题

    [kafka消息生产被阻塞] - 如何解决Kafka生产者阻塞的问题 Kafka是一个高度可扩展的分布式流平台,用于构建实时数据管道和流处理应用程序。作为一个广泛使用的消息代理系统,Kafka在数据传输方面表现出色,但是在极端情况下,它可能会出现生产者阻塞的问题。这可能会导致

    2024年02月11日
    浏览(49)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包