当我们谈论 Kafka 性能调优时,需要考虑很少的配置参数。因此,为了提高性能,最重要的配置是控制磁盘刷新速率的配置。

此外,我们可以根据组件划分这些配置。因此,让我们先谈谈Producer。因此,在生产者方面需要注意的最重要的配置是

Compression
Batch size
Sync or Async

而且,在消费者方面,重要的配置是

Fetch size

虽然,当我们考虑批处理大小时,总是会困惑多大batch size是最佳的。我们可以说,大批量大小可能是伟大的高吞吐量,它伴随着延迟问题。这意味着延迟和吞吐量成反比

在高吞吐量的情况下,可以具有低延迟,为此我们必须为使用队列时间或刷新间隔选择适当的batch size,以找到所需的正确平衡。

3. 优化 Kafka 以实现最佳性能

更具体地说,调优涉及两个重要的指标:延迟度量值吞吐量度量延迟度量值是指处理一个事件需要多长时间,同样,在特定时间范围内到达的事件数量,即吞吐量度量值。因此,大多数系统都针对延迟吞吐量进行了优化,而 Apache Kafka 则同时平衡了两者。此外,我们可以说,一个经过良好调整的 Kafka 系统只有足够的代理来处理主题吞吐量,因为接收信息时处理信息需要延迟。

a. 调整kafka Producer

正如我们知道的,Kafka使用异步发布/订阅模型。虽然我们的生产者调用 send() 命令,但返回的结果是未来。将来提供的方法检查过程中信息的状态。此外,当批次准备就绪时,生产者会将其发送给Broker。基本上,Broker等待事件,然后,接收结果,并进一步响应事务已完成。

对于延迟和吞吐量,两个参数对于 Kafka 性能调整尤其重要

i. 批次大小
batch.size总字节为单位测量批处理大小,而不是消息数。这意味着在向 Kafka Broker发送消息之前,它控制要收集的数据字节数。因此,在不超出可用内存的情况下,请尽可能高地设置此内存。默认值为 16KB

但是,如果我们增加缓冲区的大小,它可能永远不会充满。根据其他触发器(如以ms为单位的停留时间),生产者最终将发送信息。尽管通过将缓冲区批处理大小设置得过高,我们可能会影响内存使用,这不会影响延迟。

此外,如果我们的Producer一直发送,我们可能获得最好的吞吐量。此外,如果生产者经常闲置,我们可能无法编写足够的数据来保证当前的资源分配。

ii. Linger Time
为了在异步模式下缓冲数据,linger.ms设置最大时间。让我们用一个例子来理解它,一个设置为 100 批 100 毫秒的消息,要一次发送。在这里,缓冲会增加消息传递延迟,但这提高了吞吐量。

但是,默认情况下,生产者不会等待。因此,它发送缓冲区时,数据可用。

此外,我们可以将linger.ms = 5,并在一个批处理中发送更多消息,而不是立即发送。这样,发送的记录将最多增加 5 毫秒的延迟,但也会减少发送的请求数,即使系统中的负载不保证延迟。

因此,为了提高我们的生产商的延迟和更高的吞吐量,提高linger.ms

b. 调整kafka Broker

正如我们知道的,主题被划分为分区。此外,每个分区都有一个leader,此外,使用多个副本时,大多数分区都写入了领导。然而,如果领导人不能适当平衡,那么与其他人相比,他们有可能过度劳累。
因此,根据我们的系统或数据的关键性,我们希望确保有足够的复制集来保存数据。建议从每个物理存储磁盘一个分区和每个分区一个使用者开始。

c. 调整Kafka消费者

基本上,Kafka 消费者可以创建吞吐量问题。主题的使用者数必须等于分区数。因为,要处理所有需要跟上生产者需要的消费者,我们需要足够的分区。

在同一使用者组中,使用者在它们之间拆分分区。因此,向组添加更多使用者可以提高性能,同时添加更多使用者组不会影响性能。

此外,我们使用 -replica.high.watermark.checkpoint.interval.ms的方式可能会影响吞吐量。此外,我们可以标记从分区读取信息时读取信息的最后一点。这样,我们有一个检查点,如果我们必须返回并查找丢失的数据,则无需重读先前数据即可从该检查点前进。因此,如果我们为每个事件设置检查点水印,我们永远不会丢失一条消息,但它会显著影响性能。此外,我们具有安全边际,对吞吐量的影响小得多,如果相反,我们设置它以检查每一百条消息的偏移量。

4. Kafka调优中的生产服务器配置

根据群集环境和计算机配置的可用性,以下是一些配置参数及其值,我们可以修改这些参数 |

a. num.replica.fetchers

此参数定义将将数据从leader复制到follwer的线程数。根据线程的可用性,我们可以修改此参数的值。如果我们有可用的线程,则使用副本提取器的数量以并行完成复制非常重要。

b. replica.fetch.max.bytes

此参数是有关我们希望从每个提取请求中的任何分区提取的数据量。增加此参数的值是件好事,这样有助于在关注者中快速创建副本。

c. replica.socket.receive.buffer.bytes

如果我们可用于创建副本的线程较少,我们可以增加缓冲区的大小。此外,如果复制线程与传入消息速率相比速度较慢,则有助于保存更多数据。

d. num.partitions
当卡夫卡在生活,我们应该照顾这个配置。我们可以具有并行级别并并行写入数据,这将自动增加吞吐量。
了解 Storm Kafka 与配置和代码集成
但是,如果系统配置无法处理,则增加分区数可能会降低我们的性能和吞吐量。基本上,如果系统没有足够的线程或只有单个磁盘,那么创建大量分区以提供更好的吞吐量是没有意义的。因此,我们可以说,为主题创建更多的分区直接取决于可用的线程和磁盘。

e. num.io.threads
基本上,我们群集中有多少磁盘,这决定了 I/O 线程的设置值。此外,服务器使用这些线程来执行请求。因此,许多线程必须依赖于磁盘的多个线程。

5. 结论:Kafka性能调整

参考

Kafka Performance Tuning - Ways for Kafka Optimization - DataFlair
https://data-flair.training/blogs/kafka-performance-tuning/

kafka性能优化入门相关推荐

  1. Kafka性能优化及性能测试

    目的: 充分发挥kafka在低时延,高吞吐等不同场景下的优势. 参数配置: 1)提升吞吐量 2)保证低时延 3)保证高持久 4)相关参数设置说明 1.内存缓冲的大小:buffer.memory Kaf ...

  2. Kafka 性能调优实战:同等资源配置性能提升 20 几倍的秘诀

    作者 | 丁威       责编 | 欧阳姝黎 抛出问题 笔者最近在折腾数据异构体系,在实现MySQL增量数据同步到MQ(Kafka.RocketMQ),本文的故事就从这里开始. 众所周知,为了提高写 ...

  3. Kafka性能篇:为何Kafka这么快?

    『码哥』的 Redis 系列文章有一篇讲透了 Redis 的性能优化 --<Redis 核心篇:唯快不破的秘密>.深入地从 IO.线程.数据结构.编码等方面剖析了 Redis " ...

  4. 【SQLServer】| 查询性能优化

    SQL Server 性能优化 Report SQL容易实现,性能优化却是个大难题,因工作中涉及SQL Server相关code的编写,当数据量大逻辑复杂时会涉及性能问题,故写篇性能优化入门博文 SQ ...

  5. Hive3入门至精通(基础、部署、理论、SQL、函数、运算以及性能优化)15-28章

    Hive3入门至精通(基础.部署.理论.SQL.函数.运算以及性能优化)15-28章 [Hive3入门至精通(基础.部署.理论.SQL.函数.运算以及性能优化)1-14章](https://blog. ...

  6. 漫游Kafka设计篇之性能优化(7)

    Kafka在提高效率方面做了很大努力.Kafka的一个主要使用场景是处理网站活动日志,吞吐量是非常大的,每个页面都会产生好多次写操作.读方面,假设每个消息只被消费一次,读的量的也是很大的,Kafka也 ...

  7. 漫游Kafka设计篇之性能优化

    原文地址:http://blog.csdn.net/honglei915/article/details/37564757 Kafka视频教程同步首发,欢迎观看! Kafka在提高效率方面做了很大努力 ...

  8. ASP.NET性能监控和优化入门

    \ 关键要点: \ 只有与应用指标相关联,基础设施指标才能最大发挥作用. \ 高效性能优化的关键在于性能数据. \ 一些APM工具为ASP.NET提供了开箱即用的支持,这样入门使用ASP.NET仅需最 ...

  9. 网站性能优化从入门到粗通(PHP 篇)

    本文来自作者 蒋岩 在 GitChat 上分享 「网站性能优化从入门到粗通(PHP 篇)」,「阅读原文」查看交流实录. 「文末高能」 编辑 | 哈比 题外话:本次 Chat 的主题是入门到粗通,所以内 ...

最新文章

  1. 美多商城之用户中心(用户基本信息)
  2. rmi反序列化导致rce漏洞修复_JAVA反序列化漏洞解决办法
  3. 如何自学python爬虫-零基础入门Python爬虫不知道怎么学?这是入门的完整教程
  4. 讲讲排序(C++描述)
  5. 好文 | 架构师更多的是和人打交道,说说我见到和听说到的架构师升级步骤和平时的工作内容
  6. boost::process::pipe相关的测试程序
  7. jQuery自定义漂亮的下拉框插件8种效果演示
  8. sqlserver迁移数据到mysql_SQLServer数据库之将ABP的数据库从SQLSERVER迁移到MySql
  9. js 点击闭包_学习Javascript闭包(Closure)
  10. matlab中noisbloc,基于小波变换的微弱信号检测技术的研究.doc
  11. 2-4实战分类之模型构建
  12. 科技公司 CEO 合谋“诈骗”自家公司超 900 万美元,现已被捕
  13. 计算机组成原理—数据的表示、运算与校验(思维导图)
  14. 用Java制作一个家庭收支记账软件
  15. Archlinux 的灵魂──PKGBUILD、AUR 和 ABS
  16. Linux软件安装管理的三种方式——源码安装/deb/rpm/yum/apt
  17. 北邮信通导论第三单元智能温控风扇
  18. 将字符串“123”转换为十六进制0x123或者十进制123
  19. Java 爬取微信公众号文章(文字 + 图片)
  20. 张勋说:棒磨机钢棒直径的配置(热处理调质耐磨钢棒)

热门文章

  1. Thinkpad p15 gen1安装双系统遇到的问题
  2. 监控三剑客<cacti、nagios、zabbix>
  3. python序列中各元素之间存在顺序关系_《Python Cookbook(第3版)中文版》——1.10 从序列中移除重复项且保持元素间顺序不变-阿里云开发者社区...
  4. idea 一键展开所有方法 一键收纳所有方法
  5. anaconda创建和删除环境
  6. Java八大排序详解及源码
  7. dsp c语言程序设计,DSP C语言程序设计.pdf
  8. mysql navicat 多语句_使用Navicat多对多关系SQL语句在MySQL中实现
  9. python实时监控redis队列_Python的Flask框架应用调用Redis队列数据
  10. python 极速后台开发框架_基于FastAdmin快速搭建后台管理系统