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文件。

posted @   JaneySJ  阅读(124)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示