kafka快速上手

kafka基础工作机制是消息发送者可以将消息发送到kafka上指定的topic,而消息消费者,可以从指定的topic上消费消息。

kafka体系中的一些概念:

**消费者组:**每个消费者可以指定一个所属的消费者组,相同消费者组的消费者共同构成一个逻辑消费者组。每一个消息会被多个感兴趣的消费者组消费,但是在每一个消费者组内部,一个消息智慧被消费一次。
topic :这是一个逻辑概念,一个topic被认为是业务含义相同的一组消息。客户端都通过绑定topic来生产或者消费自己感兴趣的话题。
分区partition:topic只是一个逻辑概念,而partition就是实际存储消息的组件。每个partition就是一个queue队列结构。所欲偶消息以FIFO的顺序保存在这些partition分区中。

快速搭建单机服务

kafka的运行环境非常简单,只要有jvm虚拟机就可以。

kafka安装

官网下载地址:https://kafka.apache.org/community/downloads/ 我们选择下载kafka_2.13-3.8.0.tgz版本。

注意:前面2.13是开发kafka的Scala语言版本,后面3.8.0是kafka版本。

上传服务器,解压即可使用。

zookeeper启动

kafka需要基于zookeeper启动。并且kafka自带zookeeper。

yaml 复制代码
nohup bin/zookeeper-server-start.sh config/zookeeper.properties &

启动kafka

yaml 复制代码
nohup bin/kafka-server-start.sh config/server.properties &
kafka基本使用

创建topic

yaml 复制代码
[root@instance-viiz6yun kafka_2.13-3.8.0]# ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic test
Created topic test.

发送消息给topic

yaml 复制代码
./bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test
>123
>345
>456
>

接收消息

yaml 复制代码
#这样之前发送的消息,接收不到,只能接收新发送的消息
[root@instance-viiz6yun kafka_2.13-3.8.0]# ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test
567
#--from-beginning 是指从开始消息接收
[root@instance-viiz6yun kafka_2.13-3.8.0]# ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
123
345
456
567

#--partition 0 --offset 2 指定从第3条开始接收
[root@instance-viiz6yun kafka_2.13-3.8.0]# ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --partition 0 --offset 2
456
567

看似消息发送给了topic,实际是存储到了topic中的一个partition中,每一个消息都有一个编号,就是offset的编号,指定partition 和offset 可以选择接收消息

消费者组

查看消费者组信息

yaml 复制代码
[root@instance-viiz6yun kafka_2.13-3.8.0]# ./bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group testGroup

Consumer group 'testGroup' has no active members.
组名称                           partition编号  当前消费了多少消息  总共有多少消息 还剩多少消息
GROUP          TOPIC           PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             CONSUMER-ID     HOST            CLIENT-ID
testGroup       test            0          10              10              0               -               -    

当两个相同消费者组都监听时,只能有一个消费者组收到消息

yaml 复制代码
#第一个消费者组
[root@instance-viiz6yun kafka_2.13-3.8.0]# ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --group testGroup
1
2
3
yaml 复制代码
#第二个消费者组
[root@instance-viiz6yun kafka_2.13-3.8.0]# ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --group testGroup

当两个不同消费者组都监听时,都能收到消息

yaml 复制代码
[root@instance-viiz6yun kafka_2.13-3.8.0]# ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --group testGroup2
4
5
6
理解kafka的消息传递机制

kafka的消息发送者和消费者通过topic来进行业务沟通。实际上,所有的消息是存在服务端的partition这样一个数据结构中的。

相关推荐
发量惊人的中年网工几秒前
SD-WAN如何赋能工业物联网?打造工厂网络远程连接和数据传输新方案
运维·网络·分布式·物联网
java1234_小锋1 分钟前
【免费】基于Spark实时金融交易风险监控与预测系统(Java版本+可视化大屏+Kafka+SpringBoot+Vue3) 锋哥原创出品,必属精品
大数据·spark·kafka·金融交易风险监控与预测
段一凡-华北理工大学21 分钟前
AI推动工业智能化转型~系列文章05:特征工程:工业 AI 的第一生产力
数据库·人工智能·分布式·搜索引擎·特征工程·高炉智能化
明如正午1 小时前
【C#】LINQ_HashSet_BitField解析
c#·linq
Devin~Y1 小时前
从本地生活电商到 AI RAG:互联网大厂 Java 面试场景完整实战
java·spring boot·redis·elasticsearch·spring cloud·kafka·rag
斯普润布特2 小时前
Kafka KRaft 三节点 ARM64 Docker 部署
分布式·kafka
梦想画家2 小时前
告别轮询:基于PostgreSQL CDC构建实时数据管道
数据库·postgresql·kafka·实时湖仓
笨蛋不要掉眼泪2 小时前
RabbitMQ消息队列:交换机机制
java·分布式·rabbitmq
zcmodeltech2 小时前
智慧农业沙盘模型物联网控制系统设计:基于STM32与Modbus RTU的传感器-执行器闭环方案
服务器·分布式·stm32·嵌入式硬件·物联网·能源
后端观测站2 小时前
第一篇:为什么需要消息队列?
kafka·java-rocketmq