server.properties
server.properties模板
# broker id,多个broker服务器的话,每个broker id必须不同
broker.id=1# kafka broker所在节点的
hostnamehostname=10.1.1.1.3:9092# 处理网络请求的线程数
num.network.threads= 8# 执行磁盘IO的线程数
num.io.threads=8# server使用的send buffer大小。
socket.send.buffer.bytes=1048576# server使用的recive buffer大小。
socket.receive.buffer.bytes=1048576# 接受的最大请求大小(防止OOM)
socket.request.max.bytes=104857600#-------------added by Kaim ---------------
# 加入队列的最大请求数(超过该值,network thread阻塞)
queued.max.requests=16# purgatory(炼狱)是个容器,用来存放不能马上答复的网络请求。如果能答复请求则从炼狱删除。这个是fetch炼狱保存的最大请求数。设置的比默认值小是据说因为这里有个BUG,不知道0.10.x中解决没# BUG说明见:http://blog.csdn.net/stark_summer/article/details/50203133fetch.purgatory.purge.interval.requests=100# 生产者炼狱保存的最大请求数
producer.purgatory.purge.interval.requests=100############################# 日志配置#############################
# 可以设置多个日志存放的路径
log.dirs=~/kafka-logs# 默认每个主题的分区数,生产环境建议值:
8num.partitions= 8# 启停时做日志恢复每个目录所需的线程数,采用RAID的时候可以增大该值
num.recovery.threads.per.data.dir=1# 写入磁盘的消息批大小
log.flush.interval.messages=10000# 强制刷新消息到磁盘的时间阈值
log.flush.interval.ms=10000# 日志保留的最少时间 由于做压测,防止占用磁盘太多,保留时间为1ms#
log.retention.hours=168log.retention.minutes=5# 每个日志段大小,超过该值会生成新日志段
log.segment.bytes=1073741824# 检查日志分段文件的间隔时间,以确定是否文件属性是否到达删除要求。
log.retention.check.interval.ms=300000# --------------added by kami--------------
# 自动创建主题
auto.create.topics.enable=true# 当执行一次fetch后,需要一定的空间扫描最近的offset,设置的越大越好,一般使用默认值就可以
log.index.interval.bytes=4096# 每个log segment的最大尺寸。注意,如果log尺寸达到这个数值,即使尺寸没有超过log.segment.bytes限制,也需要产生新的log segment。log.index.size.max.bytes=10485760# 检查是否需要fsync的时间间隔
log.flush.scheduler.interval.ms=2000# 即使文件没有到达log.segment.bytes,只要文件创建时间到达此属性,就会创建新文件。
log.roll.hours=168# server可以接收的消息最大尺寸。重要的是,consumer和producer有关这个属性的设置必须同步,否则producer发布的消息对consumer来说太大。默认值均为一百万
message.max.bytes=1000000############################# Zookeeper #############################
# zookeeper server地址,如果有多个则用逗号分隔
zookeeper.connect=zoo1:2181,zoo2:2181,zoo3:2181# Timeout in ms for connecting to zookeeper# zk连接的超时时间
zookeeper.connection.timeout.ms=6000# zk follower的同步延迟时间
zookeeper.sync.time.ms = 2000############################ replication configuration added by KamiWan############### 从leader备份数据的线程数
num.replica.fetchers=4# 备份时每次fetch的最大值
replica.fetch.max.bytes=1048576# follwer执行fetcher请求时的最大等待时间
replica.fetch.wait.max.ms=500# 默认的replication数量,可以根据所需要的可靠性要求来配置
default.replication.factor=2# 性能调优
#处理网络请求的线程数
num.network.threads=3
#处理I/O操作的线程数
num.io.threads=8
#单个消息的最大大小
message.max.bytes=1000000#安全配置
#代理间通信使用的协议
security.inter.broker.protocol=SASL_PLAINTEXT
#启用的SASL认证机制
sasl.enabled.mechanisms=PLAIN
#代理间通信使用的SASL机制
sasl.mechanism.inter.broker.protocol=# 日志保留策略
log.retention.hours=168# 控制器和集群相关配置
#控制器监听的名称
controller.listener.names=PLAINTEXT
#是否允许未同步的副本被选为领导者
unclean.leader.election.enable=false
#:写入消息时需要的最小同步副本数
min.insync.replicas=3#Kafka 集群优化设置的参数
num.network.threads=9 (CPU数+1)默认是3
num.io.threads=16 (CPU数2到3倍)默认是8
# 每当producer写入10000条消息时,刷数据到磁盘
log.flush.interval.messages=10000
# 每间隔1秒钟时间,刷数据到磁盘
log.flush.interval.ms=1000
#默认是16384,有点小
batch.size = 100000
#加快备份的复制速度
num.replica.fetchers=4#消息从内存中写入磁盘是时候使用的线程数量。
#用来处理磁盘IO的线程数量
num.io.threads=8#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400#接受套接字的缓冲区大小
socket.receive.buffer.bytes=102400#请求套接字的缓冲区大小
socket.request.max.bytes=104857600#我们知道segment文件默认会被保留7天的时间,超时的话就
#会被清理,那么清理这件事情就需要有一些线程来做。这里就是
#用来设置恢复和清理data下数据的线程数量
num.recovery.threads.per.data.dir=1#segment文件保留的最长时间,默认保留7天(168小时),
#超时将被删除,也就是说7天之前的数据将被清理掉。
log.retention.hours=168#滚动生成新的segment文件的最大时间
log.roll.hours=168#日志文件中每个segment的大小,默认为1G
log.segment.bytes=1073741824#上面的参数设置了每一个segment文件的大小是1G,那么
#就需要有一个东西去定期检查segment文件有没有达到1G,
#多长时间去检查一次,就需要设置一个周期性检查文件大小
#的时间(单位是毫秒)。
log.retention.check.interval.ms=300000#日志清理是否打开
log.cleaner.enable=true#broker需要使用zookeeper保存meta数据
zookeeper.connect=zk01:2181,zk02:2181,zk03:2181#zookeeper链接超时时间
zookeeper.connection.timeout.ms=6000#上面我们说过接收线程会将接收到的消息放到内存中,然后再从内存
#写到磁盘上,那么什么时候将消息从内存中写入磁盘,就有一个
#时间限制(时间阈值)和一个数量限制(数量阈值),这里设置的是
#数量阈值,下一个参数设置的则是时间阈值。
#partion buffer中,消息的条数达到阈值,将触发flush到磁盘。
log.flush.interval.messages=10000#消息buffer的时间,达到阈值,将触发将消息从内存flush到磁盘,
#单位是毫秒
log.flush.interval.ms=3000
.index 文件:
描述:这是 Kafka 的偏移量索引文件。它用于快速查找消息在日志文件中的位置。
命名格式:00000000000000000000.index
作用:通过这个索引文件,Kafka 可以快速定位消息在日志文件中的物理位置,以便更快地读取消息。
.log 文件:
描述:这是 Kafka 的日志文件,存储实际的消息数据。
命名格式:00000000000000000000.log
作用:包含了生产者发送的消息内容。每个日志文件是一个分区的一部分,日志文件的命名表示消息的起始偏移量。
.timeindex 文件:
描述:这是 Kafka 的时间戳索引文件,存储消息的时间戳索引。
命名格式:00000000000000000000.timeindex
作用:通过这个文件,Kafka 可以根据时间戳快速查找消息。这个文件对于实现基于时间的消息查找非常重要。
.snapshot 文件:
描述:这是 Kafka 的快照文件,记录了日志段的元数据快照。
命名格式:00000000000000000016.snapshot
作用:用于恢复日志段的元数据,保证在崩溃恢复时能够正确地重建索引和时间戳数据。
leader-epoch-checkpoint 文件:
描述:这是 Kafka 用于记录 leader 选举周期的检查点文件。
作用:记录了分区的 leader 副本在不同的选举周期中的偏移量信息,帮助 Kafka 在故障恢复时确定正确的 leader 和消息偏移量。
partition.metadata 文件:
- 描述:这是 Kafka 的分区元数据文件。
- 作用:存储分区的基本元数据信息,如分区的 leader、replica 列表等,用于分区的管理和协调