批里批里 (゜-゜)つ🍺|

七つ一旋桜

园龄:4年2个月粉丝:6关注:3

Day11 消息队列 | 青训营笔记

这是我参与「第五届青训营」伴学笔记创作活动的第 11 天

什么是消息队列:

消息队列是一个保存信息的容器,本质是一个队列,这个队列有高吞吐,高并发,高可用的特点

image.png

信息队列的应用场景

  • 解耦: 处理系统崩溃
  • 削峰:解决服务处理能力有限
  • 异步:解决链路耗时长尾
  • 处理日志

常见的消息队列:

  • kafka kafka是分布式的,分区的,多副本的日志服务
  • BMQ 存算分离,初期定位是承接稿吞吐量的的离线业务场景,逐步替换掉对应的kafka集群
  • RocketMQ 低延迟,强一致,高性能,高可靠,万亿级容量和灵活的可扩展性
  • Pulsar 云原生分布式消息流平台,集消息,存储,轻量化函数式计算为一体,存算分离

Kafka

kafka的构成分为五个部分

  • Topic:逻辑队列,可以理解成每一个不同的业务场景就是一个不同的topic,对于这个业务来说,所有的数据都存储在这个topic中
  • Cluster:物理集群,每个集群可以建立多个不同的Topic
  • Producer:生产者,发送消息到Topic中
  • Consumer:消费者,负责消费Topic中的消息
  • ConsumerGroup:消费者组,不同组的Consumer消费进度互不干涉

Offset

kafka会对每个Topic进行分区(partition),offset就是分区内消息的相对位置,可以作为消息的唯一id,offset在分区内是严格递增的

image.png

Replica

Replica是kafka的一个容灾机制,replica是分片的副本,分布在不同的机器上

Leader对外服务,Follower异步去拉取leader的数据进行一个同步,如果leader挂掉了,可以将Follower提升成leader再堆外进行服务

部署一个kafka服务

推荐使用docker部署kafka

创建一个docker-compose.yaml

version: "3.8"

services:
  kafka:
    image: moeenz/docker-kafka-kraft:latest
    restart: always
    ports:
      - "9093:9093"
    environment:
      - KRAFT_CONTAINER_HOST_NAME=kafka
      - KRAFT_CREATE_TOPICS=topic-a,topic-b,topic-c
      - KRAFT_PARTITIONS_PER_TOPIC=3

然后运行命令启动服务

docker-compose up -d

golang开发

推荐使用Shopify开源的框架Sarama

生产者

image.png

消费者

image.png

本文作者:七つ一旋桜

本文链接:https://www.cnblogs.com/poifa/p/17716917.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   七つ一旋桜  阅读(11)  评论(0编辑  收藏  举报  
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起