大型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
相关产品推荐
相关产品推荐

