聊聊kafka client性能调优及kafka最佳实践

这里是weihubeats ,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党

背景

最近在使用kafka的时候遇到了一些性能问题。

所以就打算研究下kafka相关的性能优化方案。

client主要分两个

  • producer
  • consumer

producer

producer主要是有两个核心参数

batch.size

先说说这个参数吧 batch.size是producer的参数。

当多条消息发送到相同分区时,producer就会将消息打包到一起,然后一次性批量发送到kafka。减少网络请求

默认到小是16384即16kb

默认值其实是偏小的,所以我们最好设置为更大。

batch.size 设置的越大,吞吐就越大,但是延迟也会越大

linger.ms

我们设想一下,如果要发送的消息一直达不到我们的batch.size怎么办呢?

难道消息一直不发送吗?

这里就推出第二个参数linger.ms。表示batch的超时时间。

如果linger.ms时间内batch.size还没达到的话,消息也会直接发送。

该值越大,吞吐越大、但延迟也会越大

consumer

consumer这边的核心参数就是fetch.min.bytes,默认值是1kb

Kafka Broker端积只要积攒了1kb 的数据,就可以返回给 Consumer

然后就是一个fetch.max.wait.ms和producer的linger.ms类似。指定broker最大等待时间,默认500ms

kafka最佳实践

实际早在国外Hortonworks就总结了一些kafka的最佳实践,虽然文章时间久远,但是依旧很有参考价值

总结

其实可以看到producer的batch.size和linger.ms就是借鉴了tcp/ip的网络发送算法。

tcp/ip的Nagle算法大致的规则如下

  1. 如果包长度达到MSS,则允许发送
  2. 如果包含FIN,则允许发送
  3. 如果设置了TCP_NODELAY,则允许发送
  4. 未设置TCP_CORK选项时,若所有发出去的小数据包(包长度小于MSS)均被确认,则允许发送
  5. 上述条件都未满足,但发生了超时(一般为200ms),则立即发送。
vbnet 复制代码
if there is new data to send then
    if the window size ≥ MSS and available data is ≥ MSS then
        send complete MSS segment now
    else
        if there is unconfirmed data still in the pipe then
            enqueue data in the buffer until an acknowledge is received
        else
            send data immediately
        end if
    end if
end if

总得来说主要是四个参数

producer:

consumer:

实际还有很多参数也需要配置,在kafka最佳实践里面都有一些说明,这里就不过多介绍了

相关推荐
IT规划师8 分钟前
编程术语中的同步与异步:从"等不等"到工程取舍
后端·面试
孟陬1 小时前
Foobar 技术周刊#159:当看不懂代码时,如何高效排障调试。脏页陷阱:一条只读查询,写入数 TB 数据。推测解码:大模型加速利器
前端·人工智能·后端
GoGeekBaird1 小时前
别再给每个 AI 做自我介绍了:我做了一个「个人上下文」管理系统
后端·github·agent
码事漫谈1 小时前
腾讯混元 Hy4 正式版发布了
后端
Mikko71 小时前
Redis 连接数满了服务端有错误信息吗?连接数不增加却命令超时?6.2 实测连接池、超时与大 key 怎么判定
java·spring boot·redis·后端
苍何3 小时前
DeepSeek的Super-agent 设计,和我们的工程实践
后端
Patrick_Wilson3 小时前
第一次读 Go 项目:从两个源码文件弄清 package、import 和 go.mod
后端·go·编程语言
Patrick_Wilson3 小时前
执行 go build . 后,Go 怎样找到代码并生成程序
后端·go·编程语言
用户6919026813393 小时前
Redis 2:Redis 在怎么处理harness记忆
后端
Patrick_Wilson3 小时前
Go 变量不赋值时,为什么也有值
后端·go·编程语言