Node.js Kafka 高级 — 集群
搭建 Kafka 集群
拷贝多份 Kafka 目录,修改各自 server.properties:
| 配置 | Broker 1 | Broker 2 | Broker 3 |
|---|---|---|---|
broker.id | 1 | 2 | 3 |
listeners | PLAINTEXT://:9092 | PLAINTEXT://:9093 | PLAINTEXT://:9094 |
log.dirs | /tmp/kafka-logs-1 | /tmp/kafka-logs-2 | /tmp/kafka-logs-3 |
相同 zookeeper.connect,分别启动:
bash
bin/kafka-server-start.sh config/server.propertiesNode.js 连接集群
js
const kafka = new Kafka({
brokers: ['localhost:9092', 'localhost:9093', 'localhost:9094']
})创建副本主题
js
await admin.createTopics({
topics: [{
topic: 'critical-topic',
numPartitions: 3,
replicationFactor: 3 // 3 副本
}]
})集群架构
┌─────────────────────────────┐
│ Zookeeper │
│ (集群协调 / 元数据管理) │
└─────────────────────────────┘
↓
┌──────────┬──────────┬──────────┐
│ Broker 1 │ Broker 2 │ Broker 3 │
│ 9092 │ 9093 │ 9094 │
│ Leader │ Follower │ Follower │
└──────────┴──────────┴──────────┘
↓ (Producer)
↓ (Consumer Group)一个 Partition 有 1 个 Leader(负责读写)和多个 Follower(仅同步备份)。