kafka是依赖于zookeeper的,先安装并启动zookeeper
安装zookeeper
- 下载zookeeper
- 解压,进入zookeeper的conf目录,复制zoo_sample.cfg将其命名为zoo.cfg
- 编辑zoo.cfg文件,把里面的数据保存目录dataDir改成自己的磁盘路径
- 进入bin目录,点击zkServer.cmd启动zookeeper
安装kafka
- 下载kafka
- 解压并进入kafka的config目录,修改server.properties中的log文件路径
- 启动kafka,进入kafka安装目录下的bin\windows目录下,在命令行窗口执行以下命令
.\bin\windows\kafka-server-start.bat .\config\server.properties
kafka与zookeeper的交互我们使用默认配置就行,默认就是连接的本机,端口也是默认的,localhost:2181。
创建主题
在kafka安装目录下,进行\bin\windows目录下,执行以下命令
kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1
--partitions 1 --topic test
启动producer与consumer测试
在kafka安装目录下,进入\bin\windows目录下,执行以下命令
启动producer
kafka-console-producer.bat --broker-list localhost:9092 --topic test
启动consumer
kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test
在producer运行窗口输入消息,在consumer收到输入的信息,则说明kafka已正常安装。
kafka常用命令
列出可用主题
kafka-topics.bat --list --zookeeper localhost:2181
查看主题详细信息
kafka-topics.bat --describe --zookeeper localhost:2181 --topic test
配置集群
上面只启了一个节点,下面配置多个节点,这里是在同一台机器上做的演示
- 将config目录下的server.properties复制两份,分别命名为server-1.properties,server-2.properties
- 分别编辑server-1.properties,server-2.properties配置文件,修改以下几个参数:broker.id、listeners、log.dirs,如下所示:
server-1.properties
broker.id=1
listeners=PLAINTEXT://:9093
log.dirs=D:/java/apache/kafka_2.11-2.0.0/config/kafka-logs-1
server-2.properties
broker.id=1
listeners=PLAINTEXT://:9094
log.dirs=D:/java/apache/kafka_2.11-2.0.0/config/kafka-logs-2
在同个集群中broker.id必需是唯一的,不能重复,如果是同一台机器运行多个节点,要把监听端口和日志文件路径修改成不一样的,以免数据被覆盖。
前面zookeeper和其中一个节点已经启动了,现在我们把剩余的两个节点也启动一下,只需要分别执行以下命令即可。
.\bin\windows\kafka-server-start.bat .\config\server-1.properties
.\bin\windows\kafka-server-start.bat .\config\server-2.properties
创建分区副本为三的主题
kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic
怎么知道集群中每个节点在做什么呢?可以使用“主题描述”命令查看,如下
kafka-topics.bat --describe --zookeeper localhost:2181 --topic my-replicated-topic
运行结果如下,下面是对输出的解释。第一行给出了所有分区的摘要,下面的每一行给出了关于一个分区的信息。因为这个主题只有一个分区,所以只有一行。
Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs:
Topic: my-replicated-topic Partition: 0 Leader: 1 Replicas: 1,0,2 Isr: 1,0,2
- “leader”是负责对给定分区进行所有读写操作的节点。每个节点将作为随机选择的分区的一部分的领导者。
- “replicas”是为这个分区复制日志的节点列表,不管它们是leader还是当前存活的。
- “isr”是“同步”副本的集合。这是副本列表的子集,这些副本列表现在还在运行中,并被领导者捕获。
在这里,主题分区的leader是节点1,在用相同的命令查看之前创建的主题test
kafka-topics.bat --describe --zookeeper localhost:2181 --topic test
结果如下所示
Topic:test PartitionCount:1 ReplicationFactor:1 Configs:
Topic: test Partition: 0 Leader: 0 Replicas: 0 Isr: 0
这个主题没有副本,它在最开始创建的节点0上。
我们往my-replicated-topic主题发布一些信息测试一下
kafka-console-producer.bat --broker-list localhost:9092 --topic my-replicated-topic
>test message 4
>test message 5
>test message 6
>test message 7
>test message 8
下面启动消费者来消费这个主题的信息
kafka-console-consumer.bat --bootstrap-server localhost:9092 --from-beginning --topic my-replicated-topic
test message 4
test message 5
test message 6
test message 7
test message 8
消费者启动后消费的信息和上面发布的信息一样
下面来测试一下集群的容错能力,因为leader是节点1,现在把节点下关掉,测试消息的发布和消费是否正常,先来看一下主题描述
kafka-topics.bat --describe --zookeeper localhost:2181 --topic my-replicated-topic
Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs:
Topic: my-replicated-topic Partition: 0 Leader: 0 Replicas: 1,0,2 Isr: 0,2
从上面的结果看出,leader已经切换到从之前的从节点0,复制节点只有0和2,节点1不再是复制节点。再用生产者发布一些测试信息,看消费者是否还可以消费,结果显示消费者正常消费,说明原来的leader down了并没有影响消息的消费。