消息队列的使用 | 青训营

77 阅读2分钟

消息队列

Kafka

使用场景

  • 日志聚合:可收集各种服务的日志写入kafka的消息队列进行存储

  • 消息系统:广泛用于消息中间件

  • 系统解耦:在重要操作完成后,发送消息,由别的服务系统来完成其他操作

  • 流量削峰:一般用于秒杀或抢购活动中,来缓冲网站短时间内高流量带来的压力

  • 异步处理:通过异步处理机制,可以把一个消息放入队列中,但不立即处理它,在需要的时候再进行处理

如何使用

  1. 创建集群

  2. 新增Topic

  3. 编写生产者逻辑

  4. 编写消费者逻辑

Kafka中重要的组件

  • Topic:逻辑队列,每条发布到Kafka集群的消息都会归集于此,Kafka是面向Topic 的

  • Cluster:物理集群,每个集群中可以建立多个不同的Topic

  • Partition:每个Topic通常有多个分片

  • Producer:消息生产者,发布消息到Kafka集群的终端或服务

  • Consumer:消费者,负责消费Topic中的消息,从Kafka集群中消费消息的终端或服务

  • ConsumerGroup:消费者组,不同组Consumer消费进度互不干涉

  • 每个Consumer都属于一个Consumer Group,每条消息只能被Consumer Group中的一个Consumer消费,但可以被多个Consumer Group消费。如果所有实例都属于同一个Group,那么它实现的就是消息队列模型;如果所有实例分别属于不同的Group,那么它实现的就是发布/订阅模型

  • Offset:消息在partition内的相对位置信息,可以理解为唯一ID,在partition内严格递增

  • Replica:每个分片有多个Replica,Leader Replica将会从ISR中选出

性能优化

  • 批处理:生产者可以批量发送消息,以减少IO次数

  • 数据压缩:通过压缩减少消息大小,目前支持Snappy,Gzip,LZ4,ZSTD压缩

  • 零拷贝:减少数据在内核空间和用户空间的拷贝次数