前面我已经介绍如何搭建Apache Kafka2.3.1的单机版,今天给大家带来的是如何在Windows下搭建Apache Kafka2.3.1集群模式。
前言
- Producer API允许程序发布数据流到一个到多个Kafka topic。
- Consumer API允许程序订阅一个到多个topic,并且进行消费。
- Streams API允许程序作为一个数据流处理,将一个或多个topic中输入的数据进行消费,并生产数据流到一个或多个topics中。
- Connector API,可以通过Connector管理Kafka和另一个系统之间的数据复制,比如去捕获关系型数据库中的任意改变到一个表中。
我们已经认识了kafka集群的几个组成部分,接下我们开始搭建集群。
对于Kafka集群而言,单个Broker节点就是一个集群,因此除了启动更多的Broker实例外,没有什么大的变化。但是为了更好地理解它,让我们将集群扩展到三个节点。
1. Zookeeper的启动
Kafka集群的是把状态保存到了Zookeeper中。首先我们启动Zoookeeper节点。
bin\windows\zookeeper-server-start.bat config/zookeeper.properties
这里我启动仍然是一个单机节点的Zookeeper。其实Zookeeper集群的配置也是比较简单。这里我们就啰嗦了。
2.准备三份Kafka配置文件
现在我们修改这三个配置文件:
config/server.properties:
broker.id=0
listeners=PLAINTEXT://:9092
log.dirs=/tmp/kafka-logs
config/server-1.properties:
broker.id=1
listeners=PLAINTEXT://:9093
log.dirs=/tmp/kafka-logs-1
config/server-2.properties:
broker.id=2
listeners=PLAINTEXT://:9094
log.dirs=/tmp/kafka-logs-2
其中:
- broker.id: 是每一个borker在集群的唯一标识,和zookeeper的myid性质一样
- listeners:是每一个broker的监听端口,默认是9092
- log.dir 是每一个broker的消息存放的目录
3.启动三个Kafka节点
3.1启动9092
bin\windows\kafka-server-start.bat config/server.properties
3.2启动9093
bin\windows\kafka-server-start.bat config/server-1.properties
3.3启动9094
bin\windows\kafka-server-start.bat config/server-2.properties
这是收三个节点都已经启动
3.4 在Zookeeper的节点中查看Kafka集群的ids
这里我们使用zookeeper-shell.bat
来连接
E:\tools\kafka_2.12-2.3.1\bin>windows\zookeeper-shell.bat /
Connecting to /
Welcome to ZooKeeper!
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
ls /
[cluster, controller_epoch, controller, brokers, zookeeper, kafka-manager, admin
, isr_change_notification, consumers, log_dir_event_notification, latest_produce
r_id_block, config]
ls /brokers
[ids, topics, seqid]
ls /brokers/ids
[0, 1, 2]
我们可以看到kafka集群的数据已经注册到了Zookeeper中。
4.创建一个Topic使用3个副本
Now create a new topic with a replication factor of three:
bin\windows\kafka-topics.bat --create --bootstrap-server localhost:9092 --replication-factor 3 --partitions 1 --topic my-replicated-topic
但现在我们已经搭建好了kafka集群,我们怎么样知道每一个Broker在做什么呢?,接下我们使用describe topics
查看集群状态
bin\windows\kafka-topics.bat --describe --bootstrap-server localhost:9092 --topic my-replicated-topic
Topic:my-replicated-topic PartitionCount:10 ReplicationFactor:1
Configs:segment.bytes=1073741824
Topic: my-replicated-topic Partition: 0 Leader: 0 Replicas
: 0 Isr: 0
Topic: my-replicated-topic Partition: 1 Leader: 1 Replicas
: 1 Isr: 1
Topic: my-replicated-topic Partition: 2 Leader: 2 Replicas
: 2 Isr: 2
Topic: my-replicated-topic Partition: 3 Leader: 0 Replicas
: 0 Isr: 0
Topic: my-replicated-topic Partition: 4 Leader: 1 Replicas
: 1 Isr: 1
Topic: my-replicated-topic Partition: 5 Leader: 2 Replicas
: 2 Isr: 2
Topic: my-replicated-topic Partition: 6 Leader: 0 Replicas
: 0 Isr: 0
Topic: my-replicated-topic Partition: 7 Leader: 1 Replicas
: 1 Isr: 1
Topic: my-replicated-topic Partition: 8 Leader: 2 Replicas
: 2 Isr: 2
Topic: my-replicated-topic Partition: 9 Leader: 0 Replicas
: 0 Isr: 0
下面是对输出的解释。
第一个行显示所有partitions的一个总结,以下每一行给出一个partition中的信息,如果我们只有一个partition,则只显示一行。
-
leader 是在给出的所有
partitons
中负责读写的节点,每个节点都有可能成为leader
-
replicas 显示给定
partiton
所有副本所存储节点的节点列表,不管该节点是否是leader
或者是否存活。 -
isr 副本都已同步的的节点集合,这个集合中的所有节点都是存活状态,并且跟leader同步。
让我们发送一些信息给我们的新topic:
bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic my-replicated-topic
...
my test message 1
my test message 2
^C
现在我们来消费这些消息:
bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --from-beginning --topic my-replicated-topic
...
my test message 1
my test message 2
^C
让我们来测试一下容错性。 Broker 1 现在是 leader,让我们来杀了它:
在Linux上用
> ps aux | grep server-1.properties
7564 ttys002 0:15.91 /System/Library/Frameworks/JavaVM.framework/Versions/1.8/Home/bin/java...
> kill -9 7564
注意:我们使用过的Windows,
在 Windows 上用:
> wmic process where "caption = 'java.exe' and commandline like '%server-1.properties%'" get processid
ProcessId
6016
> taskkill /pid 6016 /f
leader
已经切换到一个从节点,而且节点1也不在同步副本集中了:
bin\windows\kafka-topics.bat --describe --zookeeper localhost:2181 --topic my-replicated-topic
不过,即便原先写入消息的leader
已经不在,这些消息仍可用于消费:
bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --from-beginning --topic my-replicated-topic
...
my test message 1
my test message 2
^C
到这里kafka集群就已经搭建完成。