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 允许消费 |