欢迎跳转到本文原文地址:https://honeypps.com/mq/is-that-the-more-partitions-in-kafka-topic-the-higher-throughout/

分区是Kafka中最小的并行操作单元,对于生产者而言,对于每一个分区的数据写入是完全可以并行化的;对于消费者而言,Kafka只允许单个分区中的消息被一个消费者线程所消费,一个消费组的消费并行度完全依赖于所消费的分区数。如此看来,如果一个主题中的分区数越多,理论上所能达到的吞吐量就越大,那么事实真的如预想的一样么?

不妨我们使用kafka-producer-perf-test.sh脚本和kafka-consumer-perf-test.sh脚本这两个性能测试工具来实际地测试一下。首先我们分别创建分区数为1、20、50、100、200、500、1000的主题,对应的主题名称分别为topic-1、topic-20、topic-50、topic-100、topic-200、topic-500、topic-1000,所有主题的副本因子都设置为1。

消息中间件的性能一般是指吞吐量。抛开硬件资源的影响,消息写入的吞吐量还会受到消息大小、消息压缩方式、消息发送方式(同步/异步)、消息确认类型(acks)、副本因子等参数的影响,消息消费的吞吐量还会受到应用逻辑处理速度的影响。本次案例中暂不考虑这些因素的影响,所有的测试除了主题的分区数不同之外,其余的因素都保持相同。

本次案例中所使用的测试环境为一个由3台普通云主机组成的3节点的Kafka集群,每台云主机内存8G、磁盘40GB、4核CPU主频为2600MHz。JVM版本为1.8.0_112,Linux系统版本为2.6.32-504.23.4.el6.x86_64。

使用kafka-producer-perf-test.sh脚本分别往这些主题中发送100万条消息体大小为1KB的消息,相对应的测试命令如下:

bin/kafka-producer-perf-test.sh --topic topic-xxx
--num-records 1000000 --record-size 1024
--throughput 100000000 --producer-props
bootstrap.servers=localhost:9092 acks=1

相对应的测试结果如下图所示。对于不同的硬件环境,甚至不同批次的测试得到的测试结果也不会完全相同,但是总体趋势还是会保持和图中的一样。

在上图中,我们可以看到分区数为1时吞吐量最低,随着分区数的增长,相应的吞吐量也跟着上涨。一旦分区数超过了某个阈值之后整体的吞吐量是不升反降的,也就是说并不是分区数越多吞吐量也就越大。这里的分区数临界阈值针对不同的测试环境也会表现出不同的结果,实际应用中可以通过类似的测试案例来找到一个合理的临界值区间。

上面针对的是消息生产者的测试,对于消息消费者而言同样也有吞吐量方面的考量。使用kafka-consumer-perf-test.sh脚本分别消费这些主题中的100万条消息,相对应的测试命令如下:

bin/kafka-consumer-perf-test.sh --topic topic-xxx
--messages 1000000 --broker-list localhost:9092

消费者性能测试的结果如下图所示。与生产者性能测试相同的是,对于不同的测试环境或者不同的测试批次所得到的测试结果也不尽相同,但总体趋势还是会保持和图中的一样。

在上图中,开始随着分区数的增加相应的吞吐量也会有多增长。一旦分区数超过了某个阈值之后整体的吞吐量也同样是不升反降的,同样说明了分区数越多并不会使得吞吐量一直增长。

分区数越多吞吐量也就越高?很多资料都认可这一观点,但实际上很多事情都会有一个临界值,当超过这个临界值之后,很多原本符合既定逻辑的走向又会变得不同。读者需要对此有个清晰的认知,懂得去伪求真,而实地测试验证不失为一座通向真知的桥梁。

欢迎跳转到本文原文地址:https://honeypps.com/mq/is-that-the-more-partitions-in-kafka-topic-the-higher-throughout/


欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。

Kafka主题中的分区数越多吞吐量就越高?BULLSHIT!!!相关推荐

  1. Kafka主题(Topic)的管理

    主题的管理包括创建主题. 查看主题信息.修改主题和删除主题等操作.可以通过 Kafka 提供的 kafka-topics.sh 脚本来执行这些操作,这个脚本位于 $KAFKA_HOME/bin/目录下 ...

  2. java上传kafka的方法_哪种方法是将所有数据从Kafka主题复制到接收器(文件或Hive表)的最佳方法?...

    我正在使用Kafka Consumer API将所有数据从Kafka主题复制到Hive表 . 为此,我使用HDFS作为中间步骤 . 我使用唯一的组ID并将偏移重置为"最早",以便从 ...

  3. 如何删除kafka主题数据

    本文我们探讨几种关于如何删除kafka主题数据的策略. 场景分析 在进入主题之前,先讨论下需要删除kafka主题数据的应用场景. 场景介绍 kafka消息在过了保留周期之后会被自动清除.但总有一些情况 ...

  4. 为什么Kafka中的分区数只能增加不能减少?

    作者:朱小厮 来源:朱小厮的博客 当一个主题被创建之后,依然允许我们对其做一定的修改,比如修改分区个数.修改配置等,这个修改的功能就是由kafka-topics.sh脚本中的alter指令所提供.我们 ...

  5. Kafka实践:到底该不该把不同类型的消息放在同一个主题中

    如果你使用了像Kafka这样的流式处理平台,就要搞清楚一件事情:你需要用到哪些主题?特别是如果你要将一堆不同的事件作为消息发布到Kafka,是将它们放在同一个主题中,还是将它们拆分到不同的主题中? K ...

  6. 历史性难题——如何为Kafka挑选合适的分区数?

    作者:朱小厮 来源:朱小厮的博客 如何为Kafka挑选合适的分区数?很多人都为这个问题伤过脑筋. 从吞吐量方面考虑,增加合适的分区数可以很大程度上提升整体吞吐量,但是超过对应的阈值之后吞吐量不升反降. ...

  7. 如何为Kafka挑选合适的分区数

    本文来说下如何为Kafka挑选合适的分区数 文章目录 概述 分区数的多少还会影响系统的可用性 如何选择合适的分区数 概述 如何为Kafka挑选合适的分区数?很多人都为这个问题伤过脑筋. 从吞吐量方面考 ...

  8. Kafka主题体系架构-复制、故障转移和并行处理

    本文讨论了Kafka主题的体系架构,讨论了如何将分区用于故障转移和并行处理. Kafka主题,日志和分区 Kafka将主题存储在日志中.主题日志分为多个分区.Kafka将日志的分区分布在多个服务器或磁 ...

  9. 使用Java API创建(create),查看(describe),列举(list),删除(delete)Kafka主题(Topic)--转载...

    原文:http://blog.csdn.net/changong28/article/details/39325079 使用Kafka的同学都知道,我们每次创建Kafka主题(Topic)的时候可以指 ...

最新文章

  1. 国内最牛逼的笔记,不接受反驳!!
  2. 普通用户下变成-bash-3.2$的解决方法
  3. Https 公钥、私钥、证书
  4. springmvc框架介绍_Java修行第071天 ---SpringMVC(上)
  5. 使用pandas处理时间变量
  6. boost::hana::is_just用法的测试程序
  7. 怎么判断linux22端口是否通,在Linux环境下使用SSH判断端口是否通(示例代码)
  8. Luogu1640 连续攻击游戏
  9. 多目标进化优化 郑金华pdf_简化审批流程 金华首张以“告知承诺制”审批的医疗器械经营许可证发放...
  10. AcWing 786. 第k个数
  11. 使用openssl模拟CA和CA证书的签发
  12. java一些基础知识点
  13. 电脑哪个服务器可以玩无限连击,无尽之剑3手把手教你无限连击攻略
  14. 免费教程《图解SQL面试题》
  15. 城市“智慧发展”的核心是人性化
  16. android锁屏原理(一)
  17. halcon机器视觉实例1--表面划痕检测
  18. OpenHarmony介绍及相关资料
  19. 如何用ajax实现页面自动刷新,Ajax实现页面自动刷新实例解析
  20. 知识图谱技术发展详解(一)

热门文章

  1. python如何读入dat数据_python二进制dat数据怎么转成txt文本
  2. MySQL 免安装版的下载与配置教程
  3. 河南版权登记,给自己的“孩子”一个身份证
  4. 2018年澳门就业情况理想 最新失业率维持1.7%
  5. bash的环境配置文件
  6. cookie自动登陆
  7. WinForm 入口Main方法
  8. 会计的思考(3):通过公司例会制度加强财务管理职能
  9. Dotnet 2.0配置系统
  10. 洛谷 - P4173 残缺的字符串(多项式匹配字符串-NTT)