1、生产者producer

1.1 producer 参数acks设置

在消息被认为是“已提交”之前,producer需要leader确认的produce请求的应答数。该参数用于控制消息的持久性,目前提供了3个取值:

  • acks = 0: 表示produce请求立即返回,不需要等待leader的任何确认。这种方案有最高的吞吐率,但是不保证消息是否真的发送成功。
  • acks = -1: 表示分区leader必须等待消息被成功写入到所有的ISR副本(同步副本)中才认为produce请求成功。这种方案提供最高的消息持久性保证,但是理论上吞吐率也是最差的。
  • acks = 1: 表示leader副本必须应答此produce请求并写入消息到本地日志,之后produce请求被认为成功。如果此时leader副本应答请求之后挂掉了,消息会丢失。这个方案,提供了不错的持久性保证和吞吐。

配置推荐:

如果要较高的持久性要求以及无数据丢失的需求,设置acks = -1。其他情况下设置acks = 1。

1.2 producer参数 buffer.memory 设置(吞吐量)

该参数用于指定Producer端用于缓存消息的缓冲区大小,单位为字节,默认值为:33554432合计为32M。kafka采用的是异步发送的消息架构,prducer启动时会首先创建一块内存缓冲区用于保存待发送的消息,然后由一个专属线程负责从缓冲区读取消息进行真正的发送。

  • 消息持续发送过程中,当缓冲区被填满后,producer立即进入阻塞状态直到空闲内存被释放出来,这段时间不能超过max.blocks.ms设置的值,一旦超过,producer则会抛出TimeoutException 异常,因为Producer是线程安全的,若一直报TimeoutException,需要考虑调高buffer.memory 了。
  • 用户在使用多个线程共享kafka producer时,很容易把 buffer.memory 打满。

1.3 producer参数 compression.type 设置

producer压缩器,目前支持none(不压缩),gzip,snappy和lz4。

2016年8月,FaceBook开源了Ztandard。官网测试: Ztandard压缩率为2.8,snappy为2.091,LZ4 为2.101

1.4 producer参数 retries设置

producer重试的次数设置。重试时producer会重新发送之前由于瞬时原因出现失败的消息。瞬时失败的原因可能包括:元数据信息失效、副本数量不足、超时、位移越界或未知分区等。倘若设置了retries > 0,那么这些情况下producer会尝试重试。

1.5 producer参数batch.size设置

producer都是按照batch进行发送的,因此batch大小的选择对于producer性能至关重要。producer会把发往同一分区的多条消息封装进一个batch中,当batch满了后,producer才会把消息发送出去。但是也不一定等到满了,这和另外一个参数linger.ms有关。默认值为16K,合计为16384.

1.6 producer参数linger.ms设置

producer是按照batch进行发送的,但是还要看linger.ms的值,默认是0,表示不做停留。这种情况下,可能有的batch中没有包含足够多的produce请求就被发送出去了,造成了大量的小batch,给网络IO带来的极大的压力。

配置推荐:

为了减少了网络IO,提升了整体的TPS。假设设置linger.ms=5,表示producer请求可能会延时5ms才会被发送。

1.7 producer参数max.in.flight.requests.per.connection设置

producer的IO线程在单个Socket连接上能够发送未应答produce请求的最大数量。增加此值应该可以增加IO线程的吞吐量,从而整体上提升producer的性能。不过就像之前说的如果开启了重试机制,那么设置该参数大于1的话有可能造成消息的乱序。

配置推荐:

  • 默认值5是一个比较好的起始点,如果发现producer的瓶颈在IO线程,同时各个broker端负载不高,那么可以尝试适当增加该值.
  • 过大增加该参数会造成producer的整体内存负担,同时还可能造成不必要的锁竞争反而会降低TPS

来源于:https://juejin.im/post/5bd51b32e51d457947024771

2、消费者consumer

kafka(四)生产者和消费者配置优化相关推荐

  1. kafka中生产者和消费者的分区问题

    本文来书说下kafka中生产者和消费者的分区问题 文章目录 概述 主题的分区数设置 分区与生产者 分区与消费者 range roundrobin(轮询) 本文参考 本文小结 概述 我们知道,生产者发送 ...

  2. 从现在开始学 Kafka:SpringBoot 集成 Kafka,生产者与消费者示例

    从现在开始学 Kafka:SpringBoot 集成 Kafka,生产者与消费者示例 前言 加依赖 生产者 加配置 生产者代码示例 消费者 加配置 消费者监听器示例 调用 关于 Serializer ...

  3. 详细讲解如何使用Java连接Kafka构建生产者和消费者(带测试样例)

    1 缘起 学习消息队列的过程中,先补习了RabbitMQ相关知识, 接着又重温了Kafka相关的知识, 发现,我并没有积累Java原生操作Kafka的文章, 只使用SpringBoot集成过Kafka ...

  4. 网络爬虫:分离生产者和消费者来优化爬虫程序

    问题描述: 基于前面的一些工作(可点击这里参见笔者前面的相关博客),我们取得了一些成果.不过存在的问题又总是会让人坐立不安.本文通过分离生产者.消费者以及引入连接池技术来优化爬虫程序.解决前面说到的数 ...

  5. springboot整合rocketmq,支持多连接生产者和消费者配置。不同topic适配不同业务处理类

    1.代码仓库 rocketmq版本4.5.2 直接上代码,下面再逐步讲解,仓库地址 本地启动后,访问swagger地址测试,http://127.0.0.1:8099/mq/swagger-ui/in ...

  6. Kafka 生产者、消费者命令行操作

    Kafka 生产者.消费者命令行操作 1.查看操作生产者命令参数 bin/kafka-console-producer.sh 参数 --bootstrap-server <String: ser ...

  7. 12.多线程的实现方式、线程安全问题的产生与解决以及生产者与消费者问题

    一.实现多线程 1.1 了解多线程 多线程是指从软件或者硬件上实现多个线程并发执行的技术,具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程,从而提升性能. 1.2 并发与并行 并行是指同 ...

  8. linux使用线程实现生产者消费者问题,Linux下生产者与消费者的线程实现

    代码见<现代操作系统> 第3版. 为了显示效果,添加了printf()函数来显示运行效果 #include #include #define MAX 20 pthread_mutex_t ...

  9. 笔记-13-多线程 Thread方法 线程安全 生产者和消费者 死锁和阻塞

    1.实现多线程 1.1简单了解多线程[理解] 是指从软件或者硬件上实现多个线程并发执行的技术. 具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程,提升性能. 1.2并发和并行[理解] 并 ...

最新文章

  1. Java学习笔记(一)--JDK环境
  2. linux设置python3为默认python_Ubuntu 18.04将Python3设置为Python默认版本
  3. FileZilla的下载与安装以及简单使用(Ubuntu和Windows之间互传文件需要下载——客户端)
  4. python的一些库(模块)集合
  5. 作业要求 20180925-1 每周例行报告
  6. 【数据结构的魅力】003.算法归并与随机快排
  7. PingingLab传世经典系列《CCNA完全配置宝典》-2.9 OSPF基本配置
  8. xmind 使用备忘
  9. linux代码折叠,VIM 代码折叠 :set foldmethod=marker
  10. 所有安卓手机通刷原生系统
  11. JQuery实现防抖节流
  12. Windows 10桌面空白处鼠标右键转圈
  13. Trend趋势反垃圾邮件黑名单申诉方法
  14. CommandNotFoundError: Your shell has not been properly configured to use ‘conda deactivate‘.
  15. Hbase 内置过滤器
  16. Samba 服务使用的端口和协议
  17. Java序列化与反序列化的深度思考
  18. 前端UI:element-ui,ant-design-vue
  19. Springboot+Mybatis-plus实现增删改查功能超详细
  20. Linux使用tc模拟网络延迟和丢包

热门文章

  1. 2021-2025年中国冲浪板鳍行业市场供需与战略研究报告
  2. as3调用java_java与as3.0中for each使用的小陷阱
  3. 编程语言“鄙视链” +1?亚马逊力捧 Rust,Go 技术负责人连发 14 条推特抵制“拉踩”
  4. 死磕算法!精选35篇算法设计实例+6本必读书打包送你
  5. 我的15年操作系统开源路——RT-Thread 创始人熊谱翔
  6. GitHub 年度报告正式发布,JavaScript 霸榜、TypeScript 爆发!
  7. 九大操作系统掌门人齐聚岳麓,六代技术人跨代对话,共同见证技术大时代
  8. 蚂蚁金服上市诞生千个亿万富翁,财富自由,离你不远!
  9. PyTorch 1.5 发布,与 AWS 合作 TorchServe!
  10. 数据工程师需要掌握的 18 个 Python 库