消息中间件是基于队列与消息传递技术,在网络环境中为应用系统提供同步或异步、可靠的消息传输的支撑性软件系统。
消息队列:指保存消息的一个容器,本质是个队列,但这个队列,需要支持高吞吐,高并发,并且高可用。
Kafka:分布式的,分区的,多副本的日志提交服务,在高吞吐场景下运行出色
RocketMQ:低延迟,强一致,高性能高可靠,伊万基容量和灵活的扩展性,在实时场景中运用较广
Pulsar和BMQ:云原生的分布式消息流平台,存算分离,前者是集消息、存储、轻量化函数式计算为一体,后者的初期定位是承接高吞吐的离线业务场景,逐步替换掉对应的kafka集群
如何使用kafka?
1.创建集群 2.新增topic 3.编写生产者逻辑 4.编写消费者逻辑
基本概念
topic(主题)逻辑队列:Producer 将消息发送到特定的主题,Consumer 通过订阅特定的 Topic(主题) 来消费消息。
cluster:物理集群,需要依赖ZooKeeper集群来协同管理
producer:生产者,负责将业务消息发送到topic中
consumer:消费者,负责消费topic中的消息
consumergroup:消费者组,不同组的consumer消费进度互不干涉,组内可以有一个或多个消费者实例,而这些消费者实例共享一个id,称为group id。消费者组内的所有成员一起订阅某个主题的所有分区,注意一个消费者组中,每一个分区只能由组内的一个消费者订阅。
Broker(代理) : 可以看作是一个独立的 Kafka 实例。多个 Kafka Broker 组成一个 Kafka Cluster。
Partition(分区) : Partition 属于 Topic 的一部分。一个 Topic 可以有多个 Partition ,并且同一 Topic 下的 Partition 可以分布在不同的 Broker 上,这也就表明一个 Topic 可以横跨多个 Broker 。
offset:Partition中的每条Message由offset来表示它在这个partition中的偏移量,这个offset不是该Message在partition数据文件中的实际存储位置,而是逻辑上一个值,它唯一确定了partition中的一条Message
replica: 副本,一个分区一般会存在1个或多个副本,leader和flower都是分区副本.副本是对分区数据的冗余备份,防止磁盘损坏或某一个主机突然崩溃断电等,提供集群的高可用能力.
一条消息的传递 Producer——>(生产)Broker——>(消费)Consumer
Producer批量发送
1.将多条消息放在一起,一次性的发送出去。 批量发送可以减少IO的次数,从而加强发送能力
2.数据压缩:通过数据压缩,减少消息大小,目前支持Snappy,Gzip,LZ4,ZSTD压缩算法
Broker
1.将日志文件分成多个日志文件段
2.Brocker 通过顺序写的机制,提高写入的效率。