kafka版本: 2.12-3.3.2

<kafka_home>/config/server.properties配置文件

#broker的全局唯一编号,不能重复,只能是数字。
broker.id=0
#============线程数配置===========
#处理网络请求的线程数量
num.network.threads=3
#用来处理磁盘IO的线程数量
num.io.threads=8
#============缓冲配置=============
#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400
#接收套接字的缓冲区大小
socket.receive.buffer.bytes=102400
#请求套接字的缓冲区大小
socket.request.max.bytes=104857600
#============数据配置=============
#kafka运行日志(数据)存放的路径,路径不需要提前创建,kafka自动帮你创建,可以配置多个磁盘路径,路径与路径之间可以用","分隔
log.dirs=/home/tools/kafka/kafka_2.12-3.3.2/data
#topic在当前broker上的分区个数
num.partitions=1
#各个消费者偏移量位置默认是在某一个节点的topic中保存的,为防止该broker宕掉无法获取offset信息,可配置在每个broker中都进行保存,配置文件中配置
# topic的offset的备份份数,默认时1个副本,开发环境推荐3以上
offsets.topic.replication.factor=1
# 设置保存offset偏移量的topic分区数
offsets.topic.num.partitions=3
# 事务主题的复制因子(设置更高推荐3以确保可用性)。 内部主题创建将失败,直到群集大小满足此复制因素要求。
transaction.state.log.replication.factor=1
# 覆盖事务主题的min.insync.replicas配置,推荐2
transaction.state.log.min.isr=1
#用来恢复和清理data下数据的线程数量
num.recovery.threads.per.data.dir=1
#===============刷入磁盘规则================
#接收的消息缓存达到多大开始刷入磁盘
#log.flush.interval.messages=10000
#接收的消息延迟时间达到多久开始刷入磁盘
#log.flush.interval.ms=1000
#segment文件保留的最长时间,超时将被删除
log.retention.hours=168
#删除存留设置,配合segment文件使用,删除只会删除整个segment,并不是删除segment文件中的部分数据
#log.retention.bytes=1073741824
#每个segment文件的大小,默认最大1G
log.segment.bytes=1073741824
# 检查过期数据的时间,默认5分钟检查一次是否数据过期
log.retention.check.interval.ms=300000
#配置连接Zookeeper集群地址(在zk根目录下创建/kafka,方便管理)
zookeeper.connect=node1:2181,node2:2181,node3:2181/kafka
#zookeeper连接超时时间
zookeeper.connection.timeout.ms=18000
#延迟初始消费者重新平衡的时间(以毫秒为单位)开发测试用0, 线上环境推荐用3000
group.initial.rebalance.delay.ms=0

Broker重要参数 配置文件路径为 config/server.properties

参数名称

描述

replica.lag.time.max.ms

ISR中,如果Follower长时间未向Leader发送通信请求或同步数据,则该Follower将被踢出ISR。该时间阈值,默认30s。

auto.leader.rebalance.enable

默认是true。 自动Leader Partition 平衡。

leader.imbalance.per.broker.percentage

默认是10%。每个broker允许的不平衡的leader的比率。如果每个broker超过了这个值,控制器会触发leader的平衡

leader.imbalance.check.interval.seconds

默认值300秒。检查leader负载是否平衡的间隔时间。

log.segment.bytes

Kafka中log日志是分成一块块存储的,此配置是指log日志划分 成块的大小,默认值1G。

log.index.interval.bytes

默认4kb,kafka里面每当写入了4kb大小的日志(.log),然后就往index文件里面记录一个索引

log.retention.hours

Kafka中数据保存的时间,默认7天。

log.retention.minutes

Kafka中数据保存的时间,分钟级别,默认关闭

log.retention.ms

Kafka中数据保存的时间,毫秒级别,默认关闭

log.retention.check.interval.ms

检查数据是否保存超时的间隔,默认是5分钟

log.retention.bytes

默认等于-1,表示无穷大。超过设置的所有日志总大小,删除最早的segment。

log.cleanup.policy

默认是delete,表示所有数据启用删除策略;

num.io.threads

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

num.replica.fetchers

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

num.network.threads

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

log.flush.interval.messages

强制页缓存刷写到磁盘的条数,默认是long的最大值,9223372036854775807。一般不建议修改,交给系统自己管理。

log.flush.interval.ms

每隔多久,刷数据到磁盘,默认是null。一般不建议修改,交给系统自己管理。

生产者参数列表 可以直接在代码中设置


new KafkaProducer<>(conf) conf中直接put添加


参数名称

描述

bootstrap.servers

生产者连接集群所需的broker地址清单。例如node1:9092,node2:9092,node3:9092

key.serializer和value.serializer

指定发送消息的key和value的序列化类型。一定要写全类名

buffer.memory

RecordAccumulator缓冲区总大小,默认32m

batch.size

缓冲区一批数据最大值,默认16k。适当增加该值,可以提高吞吐量,但是如果该值设置太大,会导致数据传输延迟增加

linger.ms

如果数据迟迟未达到batch.size,sender等待linger.time之后就会发送数据。单位ms,默认值是0ms,表示没有延迟。生产环境建议该值大小为5-100ms之间

acks

0:生产者发送过来的数据,不需要等数据落盘应答。

1:生产者发送过来的数据,Leader收到数据后应答。

max.in.flight.requests.per.connection

允许最多没有返回ack的次数,默认为5,开启幂等性要保证该值是 1-5的数字

retries

当消息发送出现错误的时候,系统会重发消息。retries表示重试次数。默认是int最大值,2147483647。

如果设置了重试,还想保证消息的有序性,需要设置

retry.backoff.ms

两次重试之间的时间间隔,默认是100ms

enable.idempotence

是否开启幂等性,默认true,开启幂等性

compression.type

生产者发送的所有数据的压缩方式。默认是none,也就是不压缩。

消费者参数列表 可以直接在代码中设置


new Kafka<>(conf) conf中直接put添加


bootstrap.servers

向Kafka集群建立初始连接用到的host/port列表

key.deserializer和value.deserializer

指定接收消息的key和value的反序列化类型。一定要写全类名

group.id

标记消费者所属的消费者组。

enable.auto.commit

默认值为true,消费者会自动周期性地向服务器提交偏移量。

auto.commit.interval.ms

如果设置了 enable.auto.commit 的值为true, 则该值定义了消费者偏移量向Kafka提交的频率,默认5s

auto.offset.reset

当Kafka中没有初始偏移量或当前偏移量在服务器中不存在(如,数据被删除了),该如何处理?

earliest:自动重置偏移量到最早的偏移量。

latest:默认,自动重置偏移量为最新的偏移量。

none:如果消费组原来的偏移量不存在,则向消费者抛异常。

anything:向消费者抛异常。

offsets.topic.num.partitions

__consumer_offsets的分区数,默认是50个分区

heartbeat.interval.ms

Kafka消费者和coordinator之间的心跳时间,默认3s。

session.timeout.ms

Kafka消费者和coordinator之间连接超时时间,默认45s

max.poll.interval.ms

消费者处理消息的最大时长,默认是5分钟。超过该值,该消费者被移除,消费者组执行再平衡

fetch.min.bytes

默认1个字节。消费者获取服务器端一批消息最小的字节数

fetch.max.wait.ms

默认500ms。如果没有从服务器端获取到一批数据的最小字节数。该时间到,仍然会返回数据

fetch.max.bytes

默认Default:  52428800(50 m)。消费者获取服务器端一批消息最大的字节数。如果服务器端一批次的数据大于该值(50m)仍然可以拉取回来这批数据,因此,这不是一个绝对最大值。一批次的大小受message.max.bytes (broker config)or

max.message.bytes (topic config)影响

max.poll.records

一次poll拉取数据返回消息的最大条数,默认是500条

partition.assignment.strategy

修改分区分配策略

XXXXXX

默认为RangeRange 优先分配,排在前面的消费者容易数据倾斜

RoundRobinAssignor 采用轮训分配,不会数据倾斜,轮训配置

StickyAssignor 粘性分配,根据上一次的分配结果再分配,降低转换开销


exclude.internal.topics

拒绝消费系统topic 例如offset对应的topic

true          不允许消费

false        允许消费