凌云时刻 · 技术
导读:接下来几个章节我们开始搭建真正的Kafka集群,服务器还是使用上一节章节搭建Zookeeper使用的三台阿里云ECS。
作者 | 计缘
来源 | 凌云时刻(微信号:linuxpk)
前言
在搭建单机Kafka章节中,在Kafka的/root/kafka_2.12-2.0.0/config/server.properties
配置文件中,我们只配置了log.dirs和advertised.listeners
这两个配置项,其他配置项都是使用默认值。
Kafka的配置项一共多达140余个,虽然有一部分通常情况下我们不需要修改,使用默认值即可,但这只是一少部分。搭建Kafka集群时,光通常情况下需要考虑的配置项就有40余个。
另外,这些配置项要根据具体的业务场景做各种调整,不存在一套配置项通吃所有业务场景的情况,而且基本不可能一次性配置出性能最优、最能满足业务场景的配置项组合,都需要经过调整、测试,反复进行配置才能总结出相对最优的配置项组合。
Broker配置
先展示一份Broker的配置内容(/root/kafk
a_2.12-2.0.0/config/server.properties
),这里给出的是一个平铺的配置项列表,有一些配置项已经作废,有一些配置项之间有会有相互影响:
############################# Server Basics #############################
broker.id=0
# DEPRECATED
host.name=阿里云ECS IP
# DEPRECATED
port=9092
delete.topic.enable=true
auto.create.topics.enable=true
############################# Socket Server Settings #############################
listeners=PLAINTEXT://阿里云ECS IP:9092
listener.security.protocol.map=PLAINTEXT:PLAINTEXT,SSL:SSL
advertised.listeners=PLAINTEXT://阿里云ECS IP:9092
inter.broker.listener.name=PLAINTEXT
num.network.threads=3
num.io.threads=8
############################# Log Basics #############################
log.dirs=/root/kafka_2.12-2.0.0/data/kafka
num.partitions=1
num.recovery.threads.per.data.dir=1
default.replication.factor=3
min.insync.replicas=2
############################# Log Retention Policy #############################
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
log.segment.ms=604800000
############################# Zookeeper #############################
zookeeper.connect=zookeeper.server.1:2181,zookeeper.server.2:2181,zookeeper.server.3:2181
zookeeper.connection.timeout.ms=6000
############################# Group Coordinator Settings #############################
group.initial.rebalance.delay.ms=0
############################# Message #############################
message.max.bytes=1048576
fetch.message.max.bytes=1048576
我们逐一了解上面这些配置项:
Broker Server基础配置
Broker Server的基础配置涉及到四个配置项:
broker.id
:整个Kafka集群内标识唯一Broker的ID。整数类型。
host.name
:部署Broker的服务器IP地址或者域名。该参数已作废。
port
:Broker开放的端口号。该参数已作废。
delete.topic.enable
:是否允许删除Topic。
auto.create.topics.enable
:是否允许在Producer在未指定Topic发送Message时自动创建Topic。
Socket Server配置
传输通信方面的配置涉及到六个配置项:
listeners
:Broker之间,Client与Broker之间通信建立连接时使用的信息。既Broker的监听者,可以以逗号分割配置多个。它的格式为[安全协议]://Hostname/IP:Port
。
listener.security.protocol.map
:以Key/Value的形式定义监听者的安全协议,在大多数情况下会将Key认为是监听者的别名。所以会这样设置:listeners=LISTENER_BOB://阿里云ECS IP1:9092,LISTENER_JOHN://阿里云ECS IP2:9092 listener.security.protocol.map=LISTENER_BOB:PLAINTEXT,LISTENER_JOHN:SSL
advertised.listeners
:将Broker建立通信的地址发布到Zookeeper中,便于Client(Producer和Consumer)连接。它的格式和listener
一致。inter.broker.listener.name
:设置内部通信时使用哪个监听者。可以直接设置listener.security.protocol.map
中设置的Key。
num.network.threads
:Broker Server接收请求及发送响应时启用的线程数量。
num.io.threads
:Broker Server处理请求、对Message进行I/O操作时启用的线程数。
和监听者相关的四个配置项,在下一章节会做详细解释。
日志基础配置
Broker Server处理日志的基础配置涉及到五个配置项:
log.dirs
:日志、Message保存的路径。
num.partitions
:创建Topic时,如果没有指定Partition数量,则使用该配置项设置的Partition数量。
num.recovery.threads.per.data.dir
:每个数据目录启用几个线程来处理,这里的线程数和数据目录数是乘积关系,并且只在Broker启动或关闭时使用。
default.replication.factor
:创建Topic时,如果没有指定Partition的Replication Factor数,则使用该配置项设置的Replication Factor数。
min.insync.replicas
:当acks=all
时,至少有多少个Replicas需要确认已持久化数据,包括Leader。
日志保留策略配置
Broker Server处理日志保留问题的配置涉及到四个配置项:
log.retention.hours
:Kafka保留Message的时间,默认是168小时,既7天。
log.segment.bytes
:每个Segment文件的大小,默认是1G。
log.retention.check.interval.ms
:检测Message是否可以被删除的时间间隔。
log.segment.ms
:Segment文件关闭的时间。
Zookeeper相关配置
Zookeeper的相关配置涉及到两个配置项:
zookeeper.connect
:设置Zookeeper地址。可用逗号分割配置多个地址,既Zookeeper集群的地址。
zookeeper.connection.timeout.ms
:等待连接Zookeeper的超时时间。
Consumer Group相关配置
Consumer Group相关的配置主要涉及到一个配置项:
group.initial.rebalance.delay.ms
:当Consumer Group新增或减少Consumer时,重新分配Topic Partition的延迟时间。
Message相关配置
Message相关配置涉及到两个配置项:
message.max.bytes
:Broker接收每条Message的最大值,默认是1M。
fetch.message.max.bytes
:Consumer每次获取Message的大小。
小结
这一章节给大家介绍了Broker的详细配置,为搭建Kafka集群做好充分准备。下一章节会对大家比较不容易理解的Listener配置做详细介绍。希望能给小伙伴们带来帮助。
END
往期精彩文章回顾
Kafka从上手到实践:搭建Zookeeper集群
Kafka从上手到实践-Zookeeper CLI:CRUD zNode Kafka从上手到实践 - 初步认知:Zookeeper Kafka从上手到实践:Kafka Java Consumer Kafka从上手到实践:Kafka Java ProducerKafka CLI:Reseting Offset & Config CLI
Kafka CLI:Consumer CLI & Producer CLI
Kafka CLI:Topic CLI & Producer CLI
Kafka从上手到实践 - 实践真知:搭建单机Kafka
Kafka从上手到实践 - 庖丁解牛:Consumer
Kafka从上手到实践 - 庖丁解牛:Producer
Kafka从上手到实践 - 庖丁解牛:Partition
Kafka从上手到实践 - 庖丁解牛:Topic & Broker
Kafka从上手到实践 - 初步认知:MQ系统
长按扫描二维码关注凌云时刻
每日收获前沿技术与科技洞见