kafka学习(1)-- 消息队列和kafka介绍

kafka学习(1)-- 消息队列和kafka介绍,第1张

kafka学习(1)-- 消息队列和kafka介绍 1. 消息队列的使用 1.1 同步通信方式和异步通信方式的对比


同步的通信方式会存在性能和稳定性的问题。

针对于同步的通信⽅式来说,异步的方式,可以让上游快速成功,极大提高了系统的吞吐量。而且在分布式系统中,通过下游多个服务的分布式事务的保障,也能保障业务执行之后的最终一致性。
消息队列解决具体的是什么问题——通信问题。

2. 消息队列的流派

目前消息队列的中间件选型有很多种:
rabbitMQ:内部的可玩性(功能性)是非常强的。
rocketMQ: 性能是与Kafka相比肩,除此之外,在功能上封装了更多的功能。
kafka:全球消息处理性能最快的一款MQ。
zeroMQ
这些消息队列中间件有什么区别?

2.1. 有broker

重topic:Kafka、RocketMQ、ActiveMQ
整个broker,依据topic来进行消息的中转。在重topic的消息队列里必然需要topic的存在。
轻topic:RabbitMQ
topic只是一种中转模式。

2.2.无broker

在生产者和消费者之间没有使用broker,例如zeroMQ,直接使用socket进行通信。

3. Kafka的安装

部署一台zookeeper服务器。

安装jdk。

下载kafka的安装包:链接。

上传到kafka服务器上: /usr/local/kafka

解压缩压缩包

进入到config目录内,修改server.properties

#broker.id属性在kafka集群中必须要是唯一
broker.id=0
#kafka部署的机器ip和提供服务的端口号
listeners=PLAINTEXT://192.168.65.60:9092 
#kafka的消息存储文件
log.dir=/usr/local/data/kafka-logs
#kafka连接zookeeper的地址
zookeeper.connect=192.168.65.60:2181

进入到bin目录内,执行以下命令来启动kafka服务器(带着配置文件)

./kafka-server-start.sh -daemon ../config/server.properties

校验kafka是否启动成功:
进入到zk内查看是否有kafka的节点: /brokers/ids/0。

4. kafka中的一些基本概念 名称解释Broker消息中间件处理节点,一个Kafka节点就是一个broker,一个或者多个Broker可以组成一个Kafka集群TopicKafka根据topic对消息进行归类,发布到Kafka集群的每条消息都需要指定一个topicProducer消息生产者,向Broker发送消息的客户端Consumer消息消费者,从Broker读取消息的客户端 5. 创建topic

通过kafka命令向zk中创建一个主题

./kafka-topics.sh --create --zookeeper 172.16.253.35:2181 --replicationfactor 1 --partitions 1 --topic test

查看当前zk中所有的主题

./kafka-topics.sh --list --zookeeper 172.16.253.35:2181
6. 发送消息

把消息发送给broker中的某个topic,打开一个kafka发送消息的客户端,然后开始向客户端向kafka服务器发送消息。

./kafka-console-consumer.sh --bootstrap-server 172.16.253.38:9092 --
topic test
7. 消费消息

打开一个消费消息的客户端,向kafka服务器的某个主题消费消息。

方式一:从当前主题中的最后一条消息的offset(偏移量位置)+1开始消费

./kafka-console-consumer.sh --bootstrap-server 172.16.253.38:9092 --
topic test

方式二:从当前主题中的第一条消息开始消费

./kafka-console-consumer.sh --bootstrap-server 172.16.253.38:9092 --
from-beginning --topic test
8. 关于消息的细节

生产者将消息发送给broker,broker会将消息保存在本地的日志文件中。

/usr/local/kafka/data/kafka-logs/主题-分区/00000000.log

消息的保存是有序的,通过offset偏移量来描述消息的有序性。

消费者消费消息时也是通过offset来描述当前要消费的那条消息的位置。

9. 单播消息

在一个kafka的topic中,启动两个消费者,一个生产者,问:生产者发送消息,这条消息是否同时会被两个消费者消费?
如果多个消费者在同一个消费组,那么只有一个消费者可以收到订阅的topic中的消息。换言之,同一个消费组中只能有一个消费者收到一个topic中的消息。

./kafka-console-consumer.sh --bootstrap-server 172.16.253.38:9092 --
consumer-property group.id=testGroup --topic test
10. 多播消息

不同的消费组订阅同一个topic,那么不同的消费组中只有一个消费者能收到消息。实际上也是多个消费组中的多个消费者收到了同一个消息。

./kafka-console-consumer.sh --bootstrap-server 172.16.253.38:9092 --
consumer-property group.id=testGroup1 --topic test
./kafka-console-consumer.sh --bootstrap-server 172.16.253.38:9092 --
consumer-property group.id=testGroup2 --topic test

下图就是描述多播和单播消息的区别

11 查看消费组的详细信息

通过以下命令可以查看到消费组的相信信息:

./kafka-consumer-groups.sh --bootstrap-server 172.16.253.38:9092 --
describe --group testGroup

重点关注以下几个信息:
current-offset: 最后被消费的消息的偏移量。
Log-end-offset: 消息总量(最后一条消息的偏移量)。
Lag:积压了多少条消息。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5702065.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存