操作演示 windows7 64位
参考文章:https://kafka.apache.org/quickstart
- 下载代码
https://www.apache.org/dyn/closer.cgi?path=/kafka/2.3.0/kafka_2.12-2.3.0.tgz - 启动zookeeper ==》zookeeper入门篇
配置zookeeper相关信息
zookeeper没有修改默认接口可以跳过以下配置
3. 启动kafka服务器
使用cmd进入到windows目录
使用以下命令
kafka-server-start.bat ../../config/server.properties
- 创建toptic
kafka-topics.bat --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test
- 获取toptic
kafka-topics.bat --list --bootstrap-server localhost:9092
- 发送消息
kafka-console-producer.bat --broker-list localhost:9092 --topic test
使用crtl + c退出 并单击y就行了
- 接受消息
kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning
接收成功
- 集群kafka
以上操作真是针对单个broker,现在我们来模拟操作集群环境下从多个borker生产消费
- 复制多个service配置文件
如果你是用linux系统可以使用cp命令进行复制
- 编辑复制文件的配置信息
config/server-1.properties:
broker.id=1
listeners=PLAINTEXT://127.0.0.1:9093
log.dirs=/tmp/kafka-logs-1
config/server-2.properties:
broker.id=2
listeners=PLAINTEXT://127.0.0.1:9094
log.dirs=/tmp/kafka-logs-2
该broker.id属性是群集中每个节点的唯一且永久的名称。
- 启用以刚创建的两个配置文件的kafa服务
ok,加上之前启动的一个一共就是启动了三个kafka服务了
- 创建拥有3个副本的toptic
kafka-topics.bat --create --bootstrap-server localhost:9092 --replication-factor 3 --partitions 1 --topic my-replicated-topic
没有报错就是成功,多么友好的交互=-=
以下为集群在zk的节点信息(可视化工具zkui)
现在我们拥有了一个集群,那么我们该怎么查看哪些broker到底在做什么呢?我们可以使用“describe topics”命令
kafka-topics.bat --describe --bootstrap-server localhost:9092 --topic my-replicated-topic
Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs:
Topic: my-replicated-topic Partition: 0 Leader: 0 Replicas: 1,2,0 Isr: 1,2,0
这是输出的解释。第一行给出了所有分区的摘要,每个附加行提供有关一个分区的信息。由于此toptic只有一个分区,因此只有一行。
- “leader”是负责给定分区的所有读写的节点。每个节点将成为随机选择的分区部分的领导者。
- “replicas”是复制此分区日志的节点列表,无论它们是否为领导者,或者即使它们当前处于活动状态。
- “isr”是“同步”复制品的集合。这是副本列表的子集,该列表当前处于活跃状态并且已经被领导者捕获。就是正在服务的节点
从以上信息可以看出0为Leader,该0不是代表0个leader而是其中的一个kafka服务标示为0
重新给新主题 my-replicated-topic发布消息
kafka-console-producer.bat --broker-list 127.0.0.1:9092 --topic my-replicated-topic
接收以上信息
kafka-console-consumer.bat --bootstrap-server 127.0.0.1:9092 --from-beginning --topic my-replicated-topic
为什么少一行是应为最后一行没有没有换行╮(╯▽╰)╭
接收成功,请无视上面的编码问题导致的乱码╮(╯▽╰)╭,我们重点不在这
杀掉其中的Leader看我们还能不能接收该消息
上面反馈的是2是leader,现在我们把0的kafka服务干掉
它对应的端口是9094
netstat -ano |findstr "端口号"
tasklist |findstr "进程id号"
taskkill /f /t /im "进程id或者进程名称"
O(∩_∩)O leader已被干掉下面我们来重新接收消息
通过zk节点信息,我们发现0节点被选举上了leader
成功接收