(本章 kafka 均 基于 kafka_2.11-2.1.0 windows 版本)参考 官方文档
可以使用与kafka 一起打包的脚本来运行 zookeeper 实例。
bin\windows\zookeeper-server-start.bat config\zookeeper.properties
bin\windows\kafka-server-start.bat config\server.properties
kafka-topics.bat
** --zookeeper 为必须指定的 option
查看 kafka 下 topic 列表
bin\windows\kafka-topics.bat --list --zookeeper localhost:2181
创建 topic: 因为为单集群复制因子为 1 ,分区数为 1 ,名称为 20190131,若复制因子大于实际集群数会报错
bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic 20190131
查看 topic 描述信息:
bin\windows\kafka-topics.bat --describe --zookeeper localhost:2181 --topic 20190131
kafka-console-producer.bat
** --broker-list --topic 均为 必须的 option
发送消息:向 localhost:9092 服务器上的 20190131 topic 上发送消息
bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic 20190131
** --bootstrap-server 为必须的 option
消费消息:消费 localhost:9092 服务器上 20190131 topic 上的消息
bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic 20190131 --from-beginning
相同的消费组,因为目前只有一个分区,所以只有一个消费者能消费到消息
bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic multi-replication --from-beginning --group group1
bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic multi-replication --from-beginning --group group1
不同的消费组,都可以消费到消息:
bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic multi-replication --from-beginning --group group2
bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic multi-replication --from-beginning --group group3
创建具有 2个副本,2个分区的 topic multi-partition
bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --topic multi-partition --partitions 2 --replication-factor 2
查看描述:
bin\windows\kafka-topics.bat --describe --zookeeper localhost:2181 --topic multi-partition
输出:
Topic:multi-partition PartitionCount:2 ReplicationFactor:2 Configs:
Topic: multi-partition Partition: 0 Leader: 2 Replicas: 2,0 Isr: 2,0
Topic: multi-partition Partition: 1 Leader: 0 Replicas: 0,2 Isr: 0,2
发布消息:比如分别发布 1, 2, 3, 4
bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic multi-partition
同一个消费者组的两个消费者:
bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic multi-partition --from-beginning --group test1
bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic multi-partition --from-beginning --group test1
或者 指定了分区:
bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic multi-partition --from-beginning --group test1 --partition 0
bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic multi-partition --from-beginning --group test1 --partition 1
这两个消费者会反别消费到 1, 3 和 2, 4 。
这里使用不同端口来模拟集群。复制 config 文件夹下的 server.properties 文件,修改其中的配置项:
broker.id:集群唯一标识
listeners:套接字服务器监听的地址,格式: listener_name://host_name:port,如 PLAINTEXT://9093
log.dirs:日志保存的地址
启动 kafka 集群1:
bin\windows\kafka-server-start.bat config\server-1.properties
启动 kafka 集群2:
bin\windows\kafka-server-start.bat config\server-2.properties
此时,创建创建一个 复制因子为3 的 topic
bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic multi-replication
查看 multi-replication 的详细配置信息:
bin\windows\kafka-topics.bat --describe --zookeeper localhost:2181 --topic multi-replication
输出结果:第一行是所有分区的总结,下面的每一行代表一个分区。
Topic:multi-replication PartitionCount:1 ReplicationFactor:3 Configs:
Topic: multi-replication Partition: 0 Leader: 1 Replicas: 1,0,2 Isr: 1,0,2
* leader:负责分区的所有读写操作。随机选举产生。
* replicas:分区的所有副本,不管它是 leader ,也不管它是不是存活,都包括在内。
* isr:同步中的副本的集合(in sync replicas),所有副本中存活的,且与 leader 有通信的。
首先杀掉 leader 的进程,由于 leader 是 1,1对应的端口号是 9093 ,查找 PID 并删除
netstat -ano|findstr "9093"
taskkill -PID 19328 -F
或者通过以下命令查找 PID:
wmic process where "caption = 'java.exe' and commandline like '%server-1.properties%'" get processid
查看对应 topic 的描述信息:
bin\windows\kafka-topics.bat --describe --zookeeper localhost:2181 --topic multi-replication
输出:
Topic:multi-replication PartitionCount:1 ReplicationFactor:3 Configs:
Topic: multi-replication Partition: 0 Leader: 0 Replicas: 1,0,2 Isr: 0,2
可以看出,leader 已经重新选举为 0,Isr 也已经去除了 1.
消息也没有丢失:
bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic multi-replication --from-beginning