消息队列-MQ

Kafka是一款高吞吐、可扩展的消息中间件,适合应用解耦和流量控制。其特性包括消息持久化、零拷贝技术、支持多种压缩方式和语言客户端,以及分布式集群架构。然而,使用消息队列也可能带来系统复杂度和数据一致性问题。
摘要由CSDN通过智能技术生成

注:本文部分引用自《Kafka 入门与实践》

概述

应用场景

  1. 应用解耦:降低系统耦合性
  2. 流量控制:削峰填谷
  3. 异步通信

消息系统的分类

从消息通信上看,消息系统可分为两类:同步消息机制、异步消息机制。
从消息的传递方式上看,可分为:队列、主题。

消息中间件

Kafka、RocketMQ、ActiveMQ、RabbitMQ、Pulsar

Kafka

Kafka 是一款基于发布订阅模式的消息系统。

Kafka 的集群结构

在这里插入图片描述

Kafka 的特性

  1. 消息持久化
    Kafka 依赖文件系统来存储和缓存消息。
  2. 高吞吐量
    Kafka 将数据写到磁盘,充分利用磁盘的顺序读写。同时,Kafka 在数据写入及数据同步采用了零拷贝技术,避免了内核缓冲区与用户缓冲区之间的拷贝,操作效率极高。Kafka 还支持数据压缩及批量发送,同时 Kafka 将每个主题划分为多个分区。这一系列的优化及实现方法使得 Kafka 有很高的吞吐量。
  3. 扩展性
    Kafka 是分布式的。Kafka 依赖 ZooKeeper 来对集群进行协调管理,生产者、消费者和 Broker 都是分布式的,可以配置多个。同时在机器扩展时,无需将整个集群停机,集群能够自动感知,重新进行负载均衡及数据复制。
  4. 多客户端支持
    Kafka 核心模块使用 Scala 语言开发,但 Kafka 支持不同语言开发生产者和消费者客户端应用程序,如 Java、Scala、C、C++、Python、Go、Erlang、Ruby、Node.js 等。
  5. 消息压缩
    Kafka 支持 GZip、Snappy、LZ4 这 3 种压缩方式,通常把多条消息放在一起组成 MessageSet,然后再把 MessageSet 放到一条消息里面去,从而提高压缩比率进而提高吞吐量。
  6. 数据备份
    Kafka 可以为每个主题指定副本数,对数据进行持久化备份,这可以一定程度上防止数据丢失,提高可用性。
  7. 轻量级
    Kafka 的代理是无状态的,即代理不记录消息是否被消费,消费偏移量的管理交由消费者自己或组协调器来维护。同时集群本身几乎不需要生产者和消费者的状态信息,这就使得 Kafka 非常轻量级,同时生产者和消费者客户端实现也非常轻量级。
  8. 安全机制
    Kafka 支持以下几种安全措施:
    • 通过 SSL 和 SASL (Kerberos),SASL/PLAIN 验证机制支持生产者、消费者与代理连接时的身份认证;
    • 支持代理与 ZooKeeper 连接身份验证;
    • 通信时数据加密;
    • 客户端读、写权限认证;
    • Kafka 支持与外部其他认证授权服务的集成。
Q&A
  1. 为什么 Kafka 的消息持久化依赖文件系统而不是内存?
    因为 Kafka 在设计上采用了时间复杂度 O(1) 的磁盘结构,它提供了常量时间的性能。使用文件系统和依赖于页缓存的存储比维护一个内存的存储更有优势,因此 Kafka 选择以文件系统来存储数据。
    文件系统存储速度的快慢取决于我们对磁盘的用法。磁盘线性读写的速度约是随机读写的 6000 多倍,并且现代的操作系统提供了预读和延迟写技术。
    Kafka 是基于 JVM 的,Java 对象对内存的消耗非常高,随着 Java 对象的增加 JVM 的垃圾回收也越来越频繁和繁琐,这些都加大了内存的消耗。

使用消息队列会带来哪些问题?

1. 系统可用性降低

如果 MQ 挂掉会影响系统可用性。

2. 系统复杂度提高

需要保证消息没有被重复消费、保证消息顺序、处理消息丢失的情况。

3. 数据一致性问题

异步消费在提升系统响应速度的同时也带来了数据一致性的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值