kafka:broker、producer、consumer常用配置
创始人
2025-05-28 03:23:30

摘要

kafka参数官方文档为:https://kafka.apache.org/documentation/#producerconfigs,这里记下常用配置。

broker

我们在kafka官网下载的文件比如kafka_2.11-2.4.0.tgz解包启动后就是就是kafka节点,主要用于接收分发消息。这些节点可以用配置成单机也可以配置集群,配置主要修改config目录下的server.properties,具体如下:

常用配置如下:

1、broker.id:每个broker的标识符,在集群中必须是唯一的,默认为0。建议可以用机器的ip尾数和端口来标识broker.id,这样无须查看字典表才能根据id找到主机。

2、port:kafka启动端口,默认为9092。kafka客户端就是通过这个端口连接kafka节点。

3、zookeeper.connect:指定连接的zookeeper地址,zookeeper主要用来保存kafka的元数据。

4、log.dir:kafka把所有消息保存到磁盘上,存放这些消息日志的目录通过这个参数指定。如果指定了多个目录,kafka会尽可能将同一分区(partition)下的消息存放到同一目录。当要新增分区时,会往分区数最少的目录加分区,而不是往占用空间最少的目录添加分区。

5、num.recovery.threads.per.data.dir:每个目录的恢复线程数量,当服务器启动、重启、关闭时,都会使用线程池对日志目录下的分区进行处理,若每个目录下分区多恢复缓慢,建议加大这个值,kafka此时用于恢复分区的线程为:log.dir的目录数量*num.recovery.threads.per.data.dir,即log.dir指定了3个目录,而num.recovery.threads.per.data.dir为5,则总共启动15个线程。

6、auto.create.topics.enable:是否启用自动创建主题,默认为true。当生产者向主题写入消息、当消费者向主题读取消息、当客户端请求获取主题元数据时,会自动创建主题。若配置为false,则需要客户端API或人工手动创建主题。

7、num.partitions:参数指定了服务器(broker)新创建的主题将包含多少分区。若客户端API或手动创建主题,则以客户端和手动指定的分区为准。一般分区只能增加不能减少。为了负载均衡,每个broker都可以存储分区的消息日志,则num.partitions的值要大于集群中broker的数量。另外,分区数量也要根据消费者和生产者速度来判断,比如每个消费者只能读取处理20MB/S的数据,而生产者的写入数据有100MB/S,则至少需要5个分区。当然,分区不是越多越好,broker对分区有限制,且分区越多,领导选举时间越长。分区数需要综合考虑。

8、log.retention.hours:消息保留时间,默认为168小时,即消息默认保留一周,一周后被删除。这个时间是判断硬盘上的文件最后修改时间来判断的,不是按每条消息的接收时间判断的。

9、log.retention.bytes:消息保修字节,通过判断每个分区的消息是否达到该限制值,来删除多出来的部分。

日志文件只要满足log.retention.hours和log.retention.bytes任意一个条件就会被删除。这两个参数参数都是针对日志片段(日志磁盘文件)的,不是针对单个消息的。

10、log.segment.bytes:日志片段大小,默认为1GB,当日志片段达到该值就会新创建文件来保存日志。

11、log.segment.ms:日志片段关闭时间,当日志片段创建时间与当前时间差值达到该值后,则日志片段会被关闭,新创建日志文件来保存消息。

12、message.max.bytes:单个消息最大值,默认1MB,若生产者发送消息的大小超过该值,则消息不会被接收,且会收到broker返回的错误信息。消费者fetch.message.max.bytes设置的值必须比message.max.bytes大,否则会出现消费者无法消费大消息的情况,会出现消息积压。

13、replica.fetch.max.bytes:副本获取消息最大值,当kafka集群的副本同步消息时,需要获取消息,该值不能小于message.max.bytes,否则会导致同步消息失败。

producer(生产者)

生产者的参数主要在构造函数的Properties里传入。spring-kafka也提供了properties传入参数的配置。主要参数如下:

1、acks:指定多少个分区副本确认消息,生产者才会认为消息是写入成功。acks=0,则无需等待服务器确认消息,生产者直接返回成功,此模式吞吐量大,但消息不可靠。acks=1,只要收到leader节点的确认消息就认为发送成功。acks=all,需要收到所有leader节点和fllower节点的确认消息就认为发送成功。后两个对消息有可靠性保证。

2、buffer.memory:生产者缓冲区大小。若应用程序发送消息速度超过客户端发送消息的速度,则会导致生产者缓冲区空间不足。

3、retries:生产者发送消息失败后的重试次数。默认每100ms重试一次,可以通过retry.backoff.ms改变这个时间间隔。

4、compression.type:压缩类型,默认下消息不压缩。这个参数可以设置为snappy、gzip等。

5、batch.size:多个消息发送到同一个分区,生产者会把它们放到同一个批次里,这个参数就是同一批次的占用内存大小(字节数)。若该值太小,会导致kafka频繁发送消息,会增加一些额外开销。

6、linger.ms:同一批次消息等待发送时间。默认情况下,即使只有一条消息,只要有可用线程,生产者也会发送掉消息,而设置该值后,消息会等待,后续有消息可以统一时间批量发送,可以增加吞吐量,因为一次性发送了更多消息,单条消息开销变小。

7、client.id:服务器用它来标识消息来源。

8、request.timeout.ms:指定了生产者在发送数据时等待服务器返回响应的时间。

9、metadata.timeout.ms:指定了生产者在获取元数据是等待服务器的响应时间。

10、max.block.ms:指定了在调用send()获取元数据的阻塞时间。

11、max.request.size:单次请求总大小。由于生产者一般是批量发送消息的,消息个数可能是1,也可能是多个,当达到该限制就会发送消息。broker对可接受消息message.max.bytes也有限制,最好都匹配得上。

consumer(消费者)

同生产者一样,参数在构造方法的Properties里传入,spring-kafka也可以直接配置文件里配置参数,主要参数如下:

1、fetch.min.bytes:消息者从服务器获取记录的最小字节数。broker获取了消费者的拉请求后,会等积压消息大小达到这个最小字节数才会将消息批量发送给消费者。

2、fetch.max.wait.ms:消费者获取数据等待时间,若broker等待时间内,消息还没有达到fetch.min.bytes,则broker不会继续等待,会直接将当前堆积的消息发送给消费者。

3、max.partition.fetch.bytes:每个分区返回给消费者最大字节数,默认1M,即KafkaConsumer.poll()方法每个分区返回的数据不超过这个参数设置的字节数。

4、session.timeout.ms:会话超时时间,默认3秒,若消费者没有在session.timeout.ms时间内发送心跳给broker,则broker会认为该消费者已死亡,会触发重平衡,将它的分区分配给其它消费者。

5、heartbeat.inerval.ms:心跳间隔时间,默认1秒,即消费者每秒向broker发送心跳。一般该值为session.timeout.ms的三分之一。

6、auto.offset.reset:指定消费者在偏移量无效情况下该如何处理,默认值是latest,即消费者只消费连上broker后产生的消息,以前积压的消息不消费。还一个值是earlist,表示消费者从起始位置开始消费。

7、enable.auto.commit:是否自动提交偏移量。默认为true。可通过auto.commit.interval.ms设置提交频率。若需要手动确认消费消息,避免重复数据或数据丢失,则建议设置为false。

8、group.id:分组id,同组下的消费者不会重复消费消息。

9、max.poll.records:用于控制单词调用call()方法能够返回的记录数量。消费者每次拉取消息的记录数量。

相关内容

热门资讯

【实验报告】实验一 图像的... 实验目的熟悉Matlab图像运算的基础——矩阵运算;熟悉图像矩阵的显示方法࿰...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
大模型落地比趋势更重要,NLP... 全球很多人都开始相信,以ChatGPT为代表的大模型,将带来一场NLP领...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
kuernetes 资源对象分... 文章目录1. pod 状态1.1 容器启动错误类型1.2 ImagePullBackOff 错误1....
STM32实战项目-数码管 程序实现功能: 1、上电后,数码管间隔50ms计数; 2、...
TM1638和TM1639差异... TM1638和TM1639差异说明 ✨本文不涉及具体的单片机代码驱动内容,值针对芯...
Qt+MySql开发笔记:Qt... 若该文为原创文章,转载请注明原文出处 本文章博客地址:https://h...
Java内存模型中的happe... 第29讲 | Java内存模型中的happen-before是什么? Java 语言...
《扬帆优配》算力概念股大爆发,... 3月22日,9股封单金额超亿元,工业富联、鸿博股份、鹏鼎控股分别为3.0...
CF1763D Valid B... CF1763D Valid Bitonic Permutations 题目大意 拱形排列࿰...
SQL语法 DDL、DML、D... 文章目录1 SQL通用语法2 SQL分类3 DDL 数据定义语言3.1 数据库操作3.2 表操作3....
文心一言 VS ChatGPT... 3月16号,百度正式发布了『文心一言』,这是国内公司第一次发布类Chat...
CentOS8提高篇5:磁盘分...        首先需要在虚拟机中模拟添加一块新的硬盘设备,然后进行分区、格式化、挂载等...
Linux防火墙——SNAT、... 目录 NAT 一、SNAT策略及作用 1、概述 SNAT应用环境 SNAT原理 SNAT转换前提条...
部署+使用集群的算力跑CPU密... 我先在开头做一个总结,表达我最终要做的事情和最终环境是如何的,然后我会一...
Uploadifive 批量文... Uploadifive 批量文件上传_uploadifive 多个上传按钮_asing1elife的...
C++入门语法基础 文章目录:1. 什么是C++2. 命名空间2.1 域的概念2.2 命名...
2023年全国DAMA-CDG... DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义...
php实现助记词转TRX,ET... TRX助记词转地址网上都是Java,js或其他语言开发的示例,一个简单的...
【分割数据集操作集锦】毕设记录 1. 按要求将CSV文件转成json文件 有时候一些网络模型的源码会有data.json这样的文件里...
Postman接口测试之断言 如果你看文字部分还是不太理解的话,可以看看这个视频,详细介绍postma...
前端学习第三阶段-第4章 jQ... 4-1 jQuery介绍及常用API导读 01-jQuery入门导读 02-JavaScri...
4、linux初级——Linu... 目录 一、用CRT连接开发板 1、安装CRT调试工具 2、连接开发板 3、开机后ctrl+c...
Urban Radiance ... Urban Radiance Fields:城市辐射场 摘要:这项工作的目标是根据扫描...
天干地支(Java) 题目描述 古代中国使用天干地支来记录当前的年份。 天干一共有十个,分别为:...
SpringBoot雪花ID长... Long类型精度丢失 最近项目中使用雪花ID作为主键,雪花ID是19位Long类型数...
对JSP文件的理解 JSP是java程序。(JSP本质还是一个Servlet) JSP是&#...
【03173】2021年4月高... 一、单向填空题1、大量应用软件开发工具,开始于A、20世纪70年代B、20世纪 80年...
LeetCode5.最长回文子... 目录题目链接题目分析解题思路暴力中心向两边拓展搜索 题目链接 链接 题目分析 简单来说࿰...