kafka基础介绍

一、为什么使用消息队列

1.使用同步的通信方式来解决多个服务之间的通信

在这里插入图片描述
同步的通信方式会存在性能和稳定性的问题。

2.使用异步的通信方式

在这里插入图片描述
针对于同步的通信方式来说,异步的方式,可以让上游快速成功,极大提高了系统的吞吐量。而且在分布式系统中,通过下游多个服务的
分布式事务的保障,也能保障业务执行之后的最终一致性。

二、消息队列的流派

目前消息队列的中间件选型有很多种:

  • rabbitMQ:内部的可玩性(功能性)是非常强的
  • rocketMQ:阿里内部一个大神,根据kafka的内部执行原理,手写的一个消息队列中间件。性能是与Kafka相比肩,除此之外,在功D
    能上封装了更多的功能。
  • kafka:全球消息处理性能最快的一款MQ
  • zeroMQ

这些消息队列中间件有什么区别?

1.有broker

  • 重topic:Kafka、RocketMQ、ActiveMQ
    整个broker,依据topic来进行消息的中转。在重topic的消息队列里必然需要topic的存在

  • 轻topic:RabbitMQ
    topic只是一种中转模式。

2.无broker

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

三、Kafka的基本知识

1.Kafka的安装

  • 部署一台zookeeper服务器
  • 安装jdk
  • 下载kafka的安装包:http://kafka.apache.org/downloads
  • 上传到kafka服务器上:/data目录下
  • 解压缩压缩包,进入到config目录内,修改server.properties
    在这里插入图片描述
#broker.id属性在kafka集群中必须要是唯一
broker.id=0
#kafka部署的机器ip和提供服务的端口号
listeners=PLAINTEXT://10.0.8.2:9092
#kafka的消息存储文件
log.dir=/usr/local/data/kafka-logs
#kafka连接zookeeper的地址
zookeeper.connect=10.0.8.2:2181

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

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

校验kafka是否启动成功:
进入到zk内查看是否有kafka的节点:/brokers/ids/0
在这里插入图片描述

2.kafka中的一些基本概念

名称解释
Broker消息中间件处理节点,一个Kafka节点就是一个broker,一个或者多个Broker可以组成一个Kafka集群
TopicKafka根据topic对消息进行归类,发布到Kafka集群的每条消息都需要指定一个topic
Producer消息生产者,向Broker发送消息的客户端
Consumer消息消费者,从Broker读取消息的客户端
ConsumerGroup每个Consumer属于一个特定的ConsumerGroup,一条消息?可以被多个不同的Consumer Group消费,但是一个Consumer Group中只能有一个Consumer能够消费该消息
Partition物理上的概念,一个topic可以分为多个partition,每个partition内部消息是有序的

3.创建topic

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

 kafka-topics.sh --create --bootstrap-server 10.0.8.2:9092 --replication-factor 1 --partitions 1 --topic test
Created topic test.

查看当前zk中所有的主题

kafka-topics.sh --list  --bootstrap-server 10.0.8.2:9092
test

4.发送消息

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

kafka-console-producer.sh --bootstrap-server 10.0.8.2:9092 --topic test

5.消费消息

打开一个消费消息的客户端,向kafka服务器的某个主题消费消息
方式一:从当前主题中的最后一条消息的offset(偏移量位置)+1开始消费

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

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

kafka-console-consumer.sh --bootstrap-server 10.0.8.2:9092 --from-beginning --topic test

6.关于消息的细节

在这里插入图片描述

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

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

消息的保存是有序的,通过offset偏移量来描述消息的有序性
消费者消费消息时也是通过offset来描述当前要消费的那条消息的位置

7.单播消息

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

kafka-console-consumer.sh --bootstrap-server 10.0.8.2:9092 --consumer-property group.id=testGroup --
topic test

在这里插入图片描述
停掉一个,另一个就开始消费消息了

8.多播消息

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

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

在这里插入图片描述

9.查看消费组及信息

# 查看当前主题下有哪些消费组
./kafka-consumer-groups.sh  --bootstrap-server 10.0.8.2:9092 --list

#查看消费组中的具体信息:比如当前偏移量、最后一条消息的偏移量、堆积的消息数量
[root@k8s-master ~]# kafka-consumer-groups.sh --bootstrap-server 10.0.8.2:9092 --describe --group testGroup

GROUP           TOPIC           PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             CONSUMER-ID                                           HOST            CLIENT-ID
testGroup       test            0          5               5               0               console-consumer-a4b98115-fcfd-4474-ba8c-9c44d6971f0d /10.0.8.2       console-consumer

重点关注以下几个信息:

  • current-offset:最后被消费的消息的偏移量
  • Log-end-offset: 消息总量(最后一条消息的偏移量)
  • Lag:积压了多少条消息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值