kafka调优参考建议 —— 筑梦之路

server/2024/9/24 2:00:24/

这里主要是从不同使用场景来调优,仅供参考。

吞吐量优先

吞吐量优先使用场景如采集日志。

1. broker配置调优

num.partitions:分区个数,设置为与消费者的线程数基本相等

2. producer配置调优

 

  • batch.size

    批量提交消息的字节数,发送消息累计大小达到该值时才会发送(或者达到linger.ms),默认16k,如果 batch 设置太小,会导致频繁网络请求,吞吐量下降;如果 batch 太大,会导致一条消息需要等待很久才能被发送出去,增加网络延时;建议设置为1M。

  • linger.ms

    发送间隔时间,默认是 0,意思就是消息必须立即被发送。如果 linger.ms 设置的太小,会导致频繁网络请求,吞吐量下降;如果 linger.ms 太长,会导致一条消息需要等待很久才能被发送出去,增加网络延时;建议设置为100ms以上。

  • compression.type

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

  • acks

    应答机制,默认是all(0.8.x之前,默认为1),即等待所有的副本收到消息后再返回成功,可以设置成1,即leader副本确认接收到消息后,生产者会收到返回成功的信息。但如果恰好此时leader失效,该条消息就会丢失。

  • buffer.memory

    内存缓冲区大小,默认32M,当消息写入过快或者写入量过大时,Sender 线程来不及处理,造成缓存区堆积,此时会阻塞用户线程,禁止往 kafka 写入消息,一般需要根据业务场景估算一个 buffer_memory 的合理值,建议64M以上。

 3. consumer配置调优

  • fetch.min.bytes

    从broker获取消息的最小字节数,只有大于这个值时,consumer才会拉取消息,默认是1,建议设置为1048576(1M)。

  • fetch.max.wait.ms

    当fetch.min.bytes不满足时,从broker获取消息的最大等待时间,默认是500,建议设置为1000

低延时优先

 使用场景有实时数据传输,比如弹幕

1. broker配置调优

  • num.partitions

    分区个数,设置为与消费者的线程数基本相等。

  • num.io.threads

    默认是8。负责写磁盘的线程数。整个参数值要占总核数的50%。

  • num.replica.fetchers

    默认是1。副本拉取线程数,这个参数占总核数的50%的1/3。

  • num.network.threads

    默认是3。数据传输线程数,这个参数占总核数的50%的2/3

2. producer配置调优​​​​​

  • linger.ms

    设置为0,即有消息就发送。

  • compression.type

    设置为nonenone。

  • acks

    设置为0,异步发送,无需等待任何broker确认

3. consumer配置调优

  • fetch.min.bytes

    设置为1,一有消息就消费。

  • 线程数

    消费者的并发线程数能满足实时消费的要求,避免积压

可靠性优先

 将kafka作为核心数据源,不允许kafka出现数据丢失情况的业务架构。

1. broker配置调优

  • default.replication.factor

    至少设置为3,2/3机器挂掉够,依然不影响数据的可靠性。

  • min.insync.replicas

    当生产者的ack设置为all时,必须满足该数量的副本同步成功后才能继续写入。当default.replication.factor设置为3时,该值建议设置为2。

  • unclean.leader.election.enable

    不洁leader选举,默认true,建议设置为false,即不允许不在ISR列表中的broker参加leader的选举,否则会导致已经提交但是还未复制的消息的丢失

2. producer配置调优

  • acks

    设置为all,等待ISR中的所有副本收到数据后再返回成功。

  • retries

    重试次数,建议>=3

3. consumer配置调优 

enable.auto.commit: 是否开启自动提交,默认true,在设置为true时与auto.commit.interval.ms(自动提交时间间隔)配合使用,有点是简单,省去了偏移量提交逻辑,缺点是会存在重复消费和消息丢失的情况,在数据可靠性优先的场景下需要设置为false,当事务提交后再提交位移。

可用性优先

 将kafka作为核心依赖,不允许kafka出现长时间不可用情况的业务架构(对数据可靠性要求不高,不阻塞读写就行)

1. broker配置调优

  • unclean.leader.election.enable

    设置为true,允许不洁的副本当选leader。

  • min.insync.replicas

    设置为1。

  • num.recovery.threads.per.data.dir

    启动时用于日志恢复和关闭时用于刷新的每个数据目录的线程数,默认为1,建议设置为1,减少重启时加载日志的时间。

2. producer配置调优

acks : 设置为0,不等待任何确认,直接返回成功。


http://www.ppmy.cn/server/42870.html

相关文章

GitHub的原理及应用详解(一)

本系列文章简介: GitHub是一个基于Git版本控制系统的代码托管平台,为开发者提供了一个方便的协作和版本管理的工具。它广泛应用于软件开发项目中,包括但不限于代码托管、协作开发、版本控制、错误追踪、持续集成等方面。 GitHub的原理可以简单…

【无标题】亚马逊5月24日宣布推出2024出口跨境物流加速器计划

亚马逊中国5月24日郑重宣布启动“2024亚马逊出口跨境物流加速器计划”,旨在依托其世界领先的物流网络和前沿技术,结合本土资源,不断优化跨境物流服务,以强化中国卖家在跨境物流供应链管理方面的能力,进而提升整体效率&…

MySQL 字段截取拼接

文章目录 前言需求:拼接函数:截取函数: 总结 前言 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i、 提示:以下是本篇文章正文内容,下面案例可供参考 需求: 将数据库中的…

datagridview复选框选中响应

winform经常用datagridview来处理相关的数据显示,如果datagridview有复选框,我们应该如何处理相关选中响应。选择datagridview的cellcontentclick事件,代码如下: bool isSelectedGridViewRow false; private void da…

linux常用软件源码安装-2

jdk、tomcat、Apache、nginx、mysql、redis、maven、nexus安装文档:linux常用软件源码安装 9.sonarqube安装 前置条件:mysql5.6和jdk8 1.下载 官网 2.安装unzip并解压sonarqube,然后移动到/usr/local yum install -y unzip unzip sonarq…

CSRF 攻击

概述 CSRF(Cross-site request forgery,跨站请求伪造)。 它是指攻击者利用了用户的身份信息,执行了用户非本意的操作。 它首先引导用户访问一个危险网站,当用户访问网站后,网站会发送请求到被攻击的站点,这次请求会携带用户的c…

python低阶基础100题(上册)

** python低阶基础100题(上册) ** 1. 请打印出字符串 Hello World print("Hello World")2. 请打印出字符串 爸爸妈妈,你们辛苦啦 print("爸爸妈妈,你们辛苦啦")3. 请打印出字符串 人生苦短,我…

景源畅信:小白做抖音运营难吗?

在数字化时代,社交媒体已成为人们生活的一部分,而抖音作为其中的翘楚,吸引了众多希望通过平台实现自我价值和商业目标的用户。对于刚入门的小白来说,运营抖音账号可能会遇到不少挑战。接下来,我们将详细探讨这一话题&a…