kafka简单入门
kafka 用途
高性能分布式的消息队列工具,你可以用它收集信息或者同时进行消息纷发。
kafka 安装以及Quickstart
安装以及quickstart见官网http://kafka.apache.org/documentation/#introduction. 启动kafka的环境要求安装java 8+,我自动安装不上然后去java官网下了二进制文件包(下方链接),解压然后添加PATH环境指向该文件夹即可:
https://download.java.net/openjdk/jdk11/ri/openjdk-11+28_linux-x64_bin.tar.gz,更多版本请参考 https://download.java.net/openjdk/ .
我敲的几个关键命令如下:
# 启动kafka server
KAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-uuid)"
bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/kraft/server.properties
bin/kafka-server-start.sh config/kraft/server.properties
启动成功后进程名称可以查到kafka,但监听端口列表中也没有kafka字样而是java字样,如下所示:
tcp6 0 0 :::9093 :::* LISTEN 33725/java
tcp6 0 0 :::9092 :::* LISTEN 33725/java
tcp6 0 0 :::43809 :::* LISTEN 33725/java
tcp6 0 0 127.0.0.1:9093 127.0.0.1:46606 ESTABLISHED 33725/java
tcp6 0 0 127.0.0.1:46606 127.0.0.1:9093 ESTABLISHED 33725/java
unix 2 [ ] STREAM CONNECTED 158878712 33725/java
unix 2 [ ] STREAM CONNECTED 137710167 33994/java
官网Quickstart中有一个往test.txt文件写信息,然后消费者再读出来的例子。这需要在另一个终端中,编辑文件config/connect-standalone.properties在里面添加如下一段话:
plugin.path=/home/xxx/ebpf/kafka_2.13-3.3.1/libs/connect-file-3.3.1.jar
然后运行bin/connect-standalone.sh config/connect-standalone.properties config/connect-file-source.properties config/connect-file-sink.properties
, 然后再在另外一个终端中运行消费端:
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic connect-test --from-beginning
关键概念理解
- broker: 就是kafka server,一个独立的kafka服务器
- topic: 官网给出的比喻是topic像文件夹,events是里面的文件.
- 分区:topic可以被分为若干个分区,每个分区都是一个有序的、不可变的消息记录集合。一般,一个主题包含几个分区,消息被追加写入每个分区的尾部。
- log: log是一组有序、不可变的消息记录。每个记录包含一个键、一个值和一个时间戳。这些记录被称为消息。
- 保留策略:broker默认的消息保留策略是要么保留一段时间(比如7天),要么保留到消息达到一定大小的字节数(比如1GB).主题可以配置自己的保留策略(配置文件中的关键字log.retention.xx),可以将消息保留到不再使用它们为止。
如果要清楚所有kafka消息,用以下命令,但是需要从头配置log format, topic等。
rm -rf /tmp/kafka-logs /tmp/zookeeper /tmp/kraft-combined-logs
kafka客户端
这些例子里的脚本只是举个例子,无法满足实际的数据读写。因此需要kafka客户端,因为我们组一直用GO开发,搜索得知有三个常用的Go版kafka客户端:Shopify/sarama、confluent-kafka-go和segmentio/kafka-go.其中sarama星多但不易上手,我看了半天没用起来,confluent-kafka-go基于cgo(不太好编译,这个性能最好,可以使用容器编译,然后把编译结果拷贝出来。),于是选了kafka-go. https://github.com/segmentio/kafka-go example文件夹里的consumer-logger和producer-random可以搭配运行,一个是消费者一个是生产者。记得要配置环境变量:
export kafkaURL=0.0.0.0:9092
export topic=quickstart-events
一般需要为客户端新建topic,收到操作topic可以使用kafka自带的脚本:
bin/kafka-topics.sh --list --bootstrap-server localhost:9092
bin/kafka-topics.sh --create --topic host-212 --bootstrap-server 192.168.1.203:9092
bin/kafka-topics.sh --delete --topic host-212 --bootstrap-server 192.168.1.203:9092
列出集群里所有主题的详细信息:
bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe
bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --under-replicated-partitions
describe还有其他选项,可用help查看。
常见问题
-
client端已经配置了远端serverIP但是还是报错向127.0.0.1:9092发送请求,是因为要在server端的config/kraft/server.properties配置文件中修改advertised.listeners=PLAINTEXT://xxx:9092.注意文件config/server.properties和config/kraft/server.properties两个文件位置不同,别改错了。
-
kafka如果是容器化的,那么一般用容器里自带相关查看脚本,例如/opt/bitnami/kafka/bin下面的kafka相关sh文件。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?