You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

大型Kafka KRaft集群控制器存储配置咨询

Kafka KRaft控制器节点磁盘配置疑问

我们正筹备搭建大型Kafka KRaft集群,部署架构为35台物理Linux机器作为Broker节点,3台Linux虚拟机作为专用控制器节点。

节点硬件配置

Broker节点(物理机)

每台Broker配置:

512G 内存
64核CPU

每台Broker配备1块RAID10磁盘,单盘容量15T,集群Broker总存储约525TB。

控制器节点(虚拟机)

每台控制器配置远小于Broker:

32G 内存
12核CPU

核心疑问:控制器节点磁盘配置方案

我们不确定控制器节点是否需要配置专用磁盘,还是可以直接利用现有250G的OS磁盘,比如将元数据主题存储在/var/lib/kafka路径下。

据我们了解,控制器节点仅__cluster_metadata主题会占用磁盘空间,且占用量极小。因此有两个方案待确认:

  • 是否可以在OS磁盘上划分50G分区来存储控制器元数据主题?
  • 还是必须为每台控制器配置专用磁盘(如sdb)?

示例磁盘挂载信息

df -h
Filesystem                       Size  Used Avail Use% Mounted on
devtmpfs                         3.8G     0  3.8G   0% /dev
tmpfs                            3.8G   12K  3.8G   1% /dev/shm
tmpfs                            3.8G  140M  3.6G   4% /run
tmpfs                            3.8G     0  3.8G   0% /sys/fs/cgroup
/dev/mapper/vg-controller-lv_root     50G   17G   34G  34% /
/dev/mapper/vg-controller_lv_var     100G  494M  100G   1% /var
/dev/sda1                        1014M  224M  791M  23% /boot
tmpfs                             764M     0  764M   0% /run/user/0
/dev/sdb                          50G   1M   50G   1% /var/lib/kafka-store_meta_data

默认控制器配置示例(KRaft模式)

more controller.properties
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#
# 此配置文件适用于KRaft模式(无需Apache ZooKeeper)。详情请见config/kraft/README.md。
#

############################# 服务器基础配置 #############################

# 此服务器的角色,设置后将进入KRaft模式
process.roles=controller

# 与当前实例角色关联的节点ID
node.id=1

# 控制器集群的连接字符串
controller.quorum.voters=1@localhost:9093

############################# Socket服务器设置 #############################

# Socket服务器监听的地址
# 注意:当`process.roles=controller`时,仅允许配置控制器监听器,且该监听器需与`controller.quorum.voters`值一致。
#   格式:
#     listeners = 监听器名称://主机名:端口
#   示例:
#     listeners = PLAINTEXT://your.host.name:9092
listeners=CONTROLLER://:9093

# 控制器使用的监听器名称列表(逗号分隔)
# KRaft模式下必须配置此项
controller.listener.names=CONTROLLER

# 监听器名称到安全协议的映射,默认与监听器名称一致。更多细节请参考配置文档
#listener.security.protocol.map=PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL

# 服务器用于接收网络请求和发送响应的线程数
num.network.threads=3

# 服务器用于处理请求的线程数(可能包含磁盘I/O操作)
num.io.threads=8

# Socket服务器使用的发送缓冲区(SO_SNDBUF)
socket.send.buffer.bytes=102400

# Socket服务器使用的接收缓冲区(SO_RCVBUF)
socket.receive.buffer.bytes=102400

# Socket服务器允许接收的最大请求大小(防止OOM)
socket.request.max.bytes=104857600


############################# 日志基础配置 #############################

# 存储日志文件的目录列表(逗号分隔)
log.dirs=/tmp/kraft-controller-logs

# 每个主题的默认日志分区数。更多分区可提升消费并行度,但也会在Broker上生成更多文件。
num.partitions=1

# 启动时日志恢复和关闭时日志刷盘的每个数据目录线程数
# 对于数据目录位于RAID阵列的部署,建议增大此值
num.recovery.threads.per.data.dir=1

############################# 内部主题设置  #############################
# 组元数据内部主题`__consumer_offsets`和`__transaction_state`的副本因子
# 除开发测试环境外,建议设置大于1的值(如3)以确保可用性
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1

############################# 日志刷盘策略 #############################

# 消息会立即写入文件系统,但默认仅会惰性调用fsync()同步OS缓存。以下配置控制数据刷盘到磁盘的策略。
# 这里需要权衡几个重要因素:
#    1. 持久性:若未使用副本机制,未刷盘的数据可能丢失。
#    2. 延迟:过大的刷盘间隔可能导致刷盘时出现延迟峰值,因为需要处理大量数据。
#    3. 吞吐量:刷盘通常是最耗时的操作,过小的刷盘间隔可能导致过多的寻道操作。
# 以下设置允许配置刷盘策略,可以按时间间隔、消息数量(或两者结合)触发刷盘。此配置为全局设置,也可按主题覆盖。

# 强制刷盘到磁盘前允许接收的消息数量
#log.flush.interval.messages=10000

# 消息在日志中停留的最长时间,超时后强制刷盘
#log.flush.interval.ms=1000

############################# 日志保留策略 #############################

# 以下配置控制日志段的清理策略。可设置按时间清理,或按累计大小清理。
# 只要满足任一条件,日志段就会被删除。删除操作始终从日志末尾开始。

# 日志文件可被删除的最小存在时长
log.retention.hours=168

# 基于大小的日志保留策略。除非剩余日志段大小低于log.retention.bytes,否则会清理日志段。与log.retention.hours独立生效。
#log.retention.bytes=1073741824

# 日志段文件的最大大小。达到此大小后会创建新的日志段。
log.segment.bytes=1073741824

# 检查日志段是否可按保留策略删除的时间间隔
log.retention.check.interval.ms=300000

内容的提问来源于stack exchange,提问作者jessica

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 06:07:01