Kafka从上手到实践-Kafka集群:配置Broker

接下来几个章节我们开始搭建真正的Kafka集群,服务器还是使用上一节章节搭建Zookeeper使用的三台阿里云ECS。

搭建单机Kafka章节中,在Kafka的/root/kafka_2.12-2.0.0/config/server.properties配置文件中,我们只配置了log.dirsadvertised.listeners这两个配置项,其他配置项都是使用默认值。

Kafka的配置项一共多达140余个,虽然有一部分通常情况下我们不需要修改,使用默认值即可,但这只是一少部分。搭建Kafka集群时,光通常情况下需要考虑的配置项就有40余个。

另外,这些配置项要根据具体的业务场景做各种调整,不存在一套配置项通吃所有业务场景的情况,而且基本不可能一次性配置出性能最优、最能满足业务场景的配置项组合,都需要经过调整、测试,反复进行配置才能总结出相对最优的配置项组合。

Broker配置

先展示一份Broker的配置内容(/root/kafka_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配置做详细介绍。希望能给小伙伴们带来帮助。

分享到: