批量与压缩策略
批量发送与消息压缩,是提高吞吐量的重要手段。

启用压缩(如 gzip、snappy、lz4 或 zstd),可显著减少网传数据量。
尤其在消息体较大、或重复性高时效果明显。
不同压缩算法在压缩率与 CPU 开销之间有权衡:lz4/zstd 通常在吞吐量场景中提供较好平衡。
结合较大的 batch.size 与合适 linger.ms。
可以形成更大、更高效的批次,降低每条消息的网络与协议开销。
配置优化
生产者配置,对吞吐量有直接影响。
应合理调整 key 配置项:增加 batch.size 可使单次发送包含更多消息,减少网络请求次数。

适当增大 linger.ms 允许等待更多消息进入批次,提高批量效率。
提升 buffer.memory 为生产者提供更大的内存缓冲区,避免因缓冲不足而阻塞发送。
对于需要权衡一致性的场景,可在 ack 设置上选择 acks=1 或 acks=0(在可接受消息丢失的前提下),以换取更低延迟与更高吞吐量。
并发与异步发送
采用异步发送与并发写入,可充分利用客户端与集群资源。

使用生产者的异步 API(例如 Java 中的 send 回调),避免同步阻塞。
通过多线程、或多个生产者实例,并行发送可以提高并发度。
同时,合理设置 max.in.flight.requests.per.connection(注意与重试重排序问题的权衡)与 retries 可在保障吞吐的同时控制重复与顺序风险。
结合批量与压缩,异步并发能显著提升每秒消息处理能力。
客户端与网络架构优化
底层网络与集群架构,对吞吐有基础性影响。
应将生产者部署在与 Kafka 集群网络延迟低的环境中,使用高带宽的网络链路。

并优化操作系统层的网络参数(如 TCP 窗口、socket 缓冲区等)。
在高负载场景下,可横向扩展分区数以提高并发写入能力,并合理分配分区键以避免热点分区。
此外,选择合适的序列化方式(紧凑且速度快)和监控客户端资源(CPU、内存、GC)也能防止因客户端瓶颈限制吞吐。
mikechen睿哥
10年+一线大厂架构实战经验,操盘多个亿级大厂核心项目,就职于阿里、淘宝等一线大厂。