Kafka 在 Linux 上的高可用配置
一 架构与前提
二 两种高可用部署模式
process.roles=broker,controllernode.id=<唯一ID(1..N)>controller.quorum.voters=1@host1:9093,2@host2:9093,3@host3:9093listeners=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093advertised.listeners=PLAINTEXT://<本机IP或域名>:9092log.dirs=/var/lib/kafkainter.broker.protocol.version 与 log.message.format.version 按升级策略设置bin/kafka-storage.sh random-uuidbin/kafka-storage.sh format -t <ClusterID> -c config/server.propertiesbin/kafka-server-start.sh config/server.propertiestickTime=2000、initLimit=10、syncLimit=5dataDir=/var/lib/zookeeperclientPort=2181server.1=host1:2888:3888、server.2=host2:2888:3888、server.3=host3:2888:3888dataDir 下创建 myid 文件,内容分别为 1/2/3broker.id=<唯一ID>listeners=PLAINTEXT://0.0.0.0:9092advertised.listeners=PLAINTEXT://<本机IP或域名>:9092log.dirs=/var/lib/kafkazookeeper.connect=host1:2181,host2:2181,host3:2181三 关键高可用参数
min.insync.replicas=2(配合 acks=all 实现写入高可靠)default.replication.factor=3offsets.topic.replication.factor=3transaction.state.log.replication.factor=3transaction.state.log.min.isr=2num.network.threads、num.io.threads 按 CPU 核数调优socket.send.buffer.bytes、socket.receive.buffer.bytes 适配带宽与延迟socket.request.max.bytes 防止过大请求 OOMlog.retention.hours / log.retention.bytes / log.segment.bytes 控制保留与滚动log.dirs=/data1/kafka,/data2/kafka(分散 I/O)acks=all、retries、enable.idempotence=true(幂等生产者)、max.in.flight.requests.per.connection≤5session.timeout.ms 与 heartbeat.interval.ms,避免不必要的再均衡四 验证与日常运维
bin/kafka-broker-api-versions.sh --bootstrap-server <任一节点IP>:9092bin/kafka-topics.sh --describe --bootstrap-server <任一节点IP>:9092 --topic <topic>bin/kafka-topics.sh --create --bootstrap-server <任一节点IP>:9092 --replication-factor 3 --partitions 3 --topic ha-testbin/kafka-console-producer.sh --bootstrap-server <任一节点IP>:9092 --topic ha-testbin/kafka-console-consumer.sh --bootstrap-server <任一节点IP>:9092 --topic ha-test --from-beginninglog.retention 与 log.dirs 空间五 常见坑与建议