下载地址:kafka-download
下载完后,找一个目录解压。
解压完成后,看看目录结构。
对于linux来讲,所有的启动文件都放在bin目录下,那一堆sh文件;
对于windows来讲,所有的启动文件放在binwindows目录下,一堆bat文件。
需要到config目录下,找到server.properties文件,指定log目录:
指定在kafka安装目录就可以。
目录结构
bin目录下放了一堆Kafka的启动文件,包括kafka启动文件、zookeeper启动文件。binwindows目录下甚至还有一套给windows用的启动文件。
config目录下有一堆配置文件,包括kafka服务器的配置文件server.properties,以及ZooKeeper的配置文件zookeeper.properties等。
启动服务器
Kafka使用ZooKeeper,因此如果还没有ZooKeeper服务器,需要先启动一个。
Kafka的那一堆打包脚本里提供了一个简单的单节点ZooKeeper实例,cmd内调用:
Zookeeper启动后,再启动Kafka服务器:
到这里,Kafka服务器启动成功。
创建主题
创建一个主题,名为test,设定只有一个分区,保留一个副本。
如果想查看当前的主题列表:
除了手动创建主题以外,还可以将代理配置一下,设置成在发布不存在的主题时自动创建主题。
发送一些消息
Kafka带有一个命令行客户端,该客户端将从文件或者标准输入中获取输入,并将其作为消息发送到Kafka集群。
默认情况下,每行将作为单独的消息发送。
运行生产者,在控制台中输入一些消息以发送到服务器:
这时候用kafka tool查看就可以看到:
启动消费者
Kafka还有一个消费者命令行,可以将消息转存到标准输出:
如图:
如果在不同的终端运行着生产者和消费者的命令行,那么现在应该能够在生产者终端中输入消息,并看到它们出现在消费者终端中。
所有命令行工具都有附加选项。之后可以记录查看。
设置多代理集群
在之前,我们的Kafka集群只有一个代理。虽然启动更多的代理并没有什么太大的作用,但是我们这里可以先感受一下(在本地机器上)将集群扩展为3个节点的方法:
首先我们需要为每个broker都创建一个配置文件(windows上用copy指令):
然后分别编辑这几个配置文件,主要修改以下几个属性即可:
默认的server.properties,broker.id=0,listener默认应该是9092。
broker.id,这个属性是每个代理的唯一名称,要保证不重复。
这里重写端口和日志目录,是因为我们需要在同一台机器上运行它们,所以要避免不同代理使用同一端口的情况。
之前我们已经启动了ZooKeeper和一个单节点,现在我们启用两个新来的节点:
启动之后,在kafka tool中可以看到:
broker已经变成3个了。
现在再创建一个复制因子为3的新主题:
既然我们现在有了一个集群,那我们怎么知道集群下每个代理都在做些什么?
使用describe指令:
第一行给出了所有分区的摘要,之后每附加一行就给出一个分区的信息。
当前主题只有一个分区,所以只有一行。
- leader:负责给定分区所有读取和写入的节点。每个节点都可能成为领导者;
- replicas:副本,哪些节点复制了此分区的日志;
- Isr:一组同步副本,是replicas的子集,当前存活,且进度跟leader一样;
在我们的示例中,my-replicated-topic 只有一个分区,分区下只有一个leader节点。
如果想在新主题下发布或者查看消息的话,跟之前一样,改改topic名就可以,比如说发布:
如果我们这时候把leader节点关掉,也并不会影响整个集群的时候,kafka将在现有的可用节点里选择一个作为leader,原先的leader也将不会在同步副本集中。
2022-4-13 17:47:20 以上测试失败,集群崩掉了。。
常见问题
在kafka安装目录下,输入命令:
结果报错:
疑似原因是kafka目录建的太深了,原先我的kafka根目录位于磁盘下的四级目录,直接放在磁盘目录下就好了。
很神奇的问题,据说就是文件夹树的深度太深了。
可视化查看kafka topic内容的工具
下载地址:https://www.kafkatool.com/download.html
安装后,双击.exe,启动工具就可以。
右键add 新链接,填写基本信息:
bootstrap servers多是限制只能用域名来访问,所以需要自己设置hosts。
C:WindowsSystem32driversetc 下的 hosts 文件中,添加入 kafka 的集群域名, 例如:
kafka tool支持的功能有很多,还可以模拟发送message,功能很丰富。
详细的功能,可以参照参考文献1。
打印当前所有topic
2022-4-26 13:53:21 第一种方式好像不行,删完之后直接kafka打不开了。
2022-4-26 14:13:42 windows端删除topic就是有问题,每次删除必崩溃。我已经不敢动了。
彻底删除topic有两种方式:
- 删除kafka存储目录下相关topic目录。(即server.properties中对log.dirs的设置);
- 如果配置了delete.topic.enable=true直接通过命令删除,如果命令删除不掉,直接通过zookeeper-client 删除掉broker下的topic即可。
The Cluster ID doesn’t match stored clusterId