|
这一节我们看下怎么创建一个多实例的集群(以三个节点为例)。
一、 创建配置文件
进入到 Kafka 主目录,以 config/server.properties 为原型,创建两个新的节点配置文件
cp config/server.properties config/server-1.properties
cp config/server.properties config/server-2.properties
按如下方式修改这两个配置文件的相关属性
config/server-1.properties:
listeners=PLAINTEXT://:9093
broker.id=1
port=9093
log.dir=/tmp/kafka-logs-1
config/server-2.properties:
listeners=PLAINTEXT://:9094
broker.id=2
port=9094
log.dir=/tmp/kafka-logs-2
上述属性中 broker.id 在集群中必须是唯一且永久的。我们打算在同一台机器上启动另两个节点实例,为避免冲突,端口和日志文件路径也做了相应的修改。
二、启动服务
输入如下命令启动服务:
bin/kafka-server-start.sh config/server.properties &
bin/kafka-server-start.sh config/server-1.properties &
bin/kafka-server-start.sh config/server-2.properties &
jps 一下,一共可以看到三个 Kafka 进程。
三、 创建主题
现在我们创建一个具有三份副本、两个划分的主题:
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic2
我们可以通过 describe 参数查看集群中对刚刚创建的主题的配置情况:
bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic2
Topic:my-replicated-topic2 PartitionCount:2 ReplicationFactor:3 Configs:
Topic: my-replicated-topic2 Partition: 0 Leader: 0 Replicas: 0,1,2 Isr: 0,1,2
Topic: my-replicated-topic2 Partition: 1 Leader: 1 Replicas: 1,2,0 Isr: 1,2,0
这里解释一下上述输出:第一行给出了所有划分的摘要信息,接下来逐行显示每个划分的详细信息。
- leader 节点响应对应划分的全部读写请求。
- replicas 是一个节点列表,他们产生相应划分的副本信息,里面的节点不一定都是存活的。
- isr 是一组非同步(in-sync)的备份,它是 replicas 的子集,里面的节点当前都是存活的。
四、 验证可靠性
接下来我们验证一下多副本的可靠性。先灌两条消息到之前创建的主题上:
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic my-replicated-topic2
test message 1
test message 2
读一下看看:
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --from-beginning --topic my-replicated-topic2
test message 1
test message 2
(注意因为我们申请了两个划分,上述命令的结果有可能顺序不一致,也就是 test message 2 在前面)
我们通过这个命令找到 id 为 1 的节点实例:
ps -ef | grep server-1.properties
work 15053 47875 0 17:25 pts/1
干掉这个节点进程:
kill -9 15053
这时候我们再看一下主题的状态描述:
bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic2
Topic:my-replicated-topic2 PartitionCount:2 ReplicationFactor:3 Configs:
Topic: my-replicated-topic2 Partition: 0 Leader: 0 Replicas: 0,1,2 Isr: 0,2
Topic: my-replicated-topic2 Partition: 1 Leader: 2 Replicas: 1,2,0 Isr: 2,0
可以看出来节点 1 已经被停掉了。我们再去主题中读一下消息:
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --from-beginning --topic eplicated-topic2
test message 2
test message 1
谢天谢地,数据还在。
|
|