![d71c17bf0e309924b13b05191162d41e.png](https://i-blog.csdnimg.cn/blog_migrate/a1de9dde05de187cba641c865e1dc9c8.jpeg)
参考资料
Kafka 中文文档
Kafka的安装和简单实例测试
kafka-python
1 安装
Kafka 中文文档中主要介绍了 Linux/Windows 系统下的 Kafka 配置,为了在本地 Mac 系统下跑起一个 demo,本文简单介绍如何在 Mac 中跑起 Kafka。
执行 brew install kafka
,由于 Kafka 需要依赖 ZooKeeper,所有在 brew
过程中,会把 Kafka 的其他依赖一起安装到 /usr/local/Cellar
目录下。
![ba501620eda0521f01001f89197d1fef.png](https://i-blog.csdnimg.cn/blog_migrate/f130549fccf56787b25cc550318d26e4.jpeg)
2 启动
可以到安装目录下的 bin
来看一下预定的一些启动脚本。
![a87e2937b9f2b168da52d087de449ceb.png](https://i-blog.csdnimg.cn/blog_migrate/49bb01d55bd135200c97d0ebf499fe23.png)
在启动 Kafka 之前需要先启动 ZooKeeper,看看 ZK 的启动命令里面有什么内容。
#!/bin/bash
JAVA_HOME="$(/usr/libexec/java_home --version 1.8)" exec "/usr/local/Cellar/kafka/0.11.0.1/libexec/bin/zookeeper-server-start.sh" "$@"
可以看出,实际上其启动命令是一个调用的 bash 脚本。感兴趣的话可以进一步查看该脚本的详细内容。运行该启动命令,会有以下输出,提示我们需要一份 ZK 的配置文件。
➜ bin zookeeper-server-start
USAGE: /usr/local/Cellar/kafka/0.11.0.1/libexec/bin/zookeeper-server-start.sh [-daemon] zookeeper.properties
那么这个配置文件可以在刚刚 brew
的时候安装的 ZK 依赖的配置目录下查找,具体如下:
![0b3c69cba0b410101c20d65362d5cf0a.png](https://i-blog.csdnimg.cn/blog_migrate/a48697ae07a954e9aeeccfe7569a0a2c.png)
那么完整的 ZK 启动命令应该是这样的 zookeeper-server-start /usr/local/etc/kafka/zookeeper.properties
,注意后面的为 ZK 配置文件的绝对路径。现在 ZK 应该已经成功启动了。
![209fe3def05d1a5117418b6a1487244e.png](https://i-blog.csdnimg.cn/blog_migrate/2813aeccd037040c6e70ac97173e9f42.jpeg)
启动 Kafka 集群的过程与 ZK 相似,可以到对应配置文件目录中启动。
![33eeaef38a2b32c27bc2850286f4555e.png](https://i-blog.csdnimg.cn/blog_migrate/fe9d540888f13bee082e600c9a0a5394.png)
topic
是发布消息发布的 category
类别,以单节点的配置创建了一个叫 runzhliu
的 topic
。
➜ workspace kafka-topics --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic runzhliu
Created topic "runzhliu".
另外可以用 list
列出所有创建的 topics
,来查看刚才创建的主题是否存在。
➜ workspace kafka-topics --list --zookeeper localhost:2181
dblab
my_favorite_topic
runzhliu
然后我们用 producer
生产一些消息,hello oscar
。
➜ workspace kafka-console-producer --broker-list localhost:9092 --topic runzhliu
>hello
>oscar
最后用 consumer
来消费这些消息。
➜ workspace kafka-console-consumer --zookeeper localhost:2181 --topic runzhliu --from-beginning
Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].
hello
oscar
3 Python 客户端
因为使用脚本来生产、消费消息比较麻烦,而在生产中一般都是用封装好的客户端来进行操作,这里选择用 Python 的客户端 kafka-python。
创建一个目录来放置 Python 脚本如下:
![f2940250686109c2ee045d006d382903.png](https://i-blog.csdnimg.cn/blog_migrate/65b615d8c0eb5ad63f11cf99544235b7.png)
按照官方 Demo,先启动一个消费者进程如下:
![d7a1bf8d2db68e70771c6c730b92e05e.png](https://i-blog.csdnimg.cn/blog_migrate/31b0322507a1fb5e72e68bbe62cc1918.png)
运行成功之后可以选择在用 Shell 脚本来对 runzhliu
主题来产生新的消息,这样在消费者的日志中就可以看到消费的消息,此处我们还是用 Python 客户端来产生一些消息。
![a6eebcd8301bc70795c0f4b4b8826952.png](https://i-blog.csdnimg.cn/blog_migrate/a6d34f3de1abb195316afe306f1c74ad.png)
以下是向主题发送三条消息。然后消费者日志会显示:
![76255425c0ddf4242a430df60b8002b2.png](https://i-blog.csdnimg.cn/blog_migrate/3c1e52cc63fd58dbf9be568edbbcde14.jpeg)