消息队列| 青训营笔记

99 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记

Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。 该项目最开始是有领英发起,用于解决用户记录问题,该项目的目标是为处理实时数据提供一个统一、高吞吐、低延迟的平台。

业界消息队列对比:

  • kafka,使用范围最广,分布式,分区的,具有多副本的日志提交服务,适用于高屯图的场景。具有多个不同的版本,其中最广泛的Apach Kafka。

  • RocketMQ: 低延迟,强一致性,高性能、高可靠性,其实时性能优异。

  • Pulsar:是下一代云原生分布式消息流平台,集消息、存储等一体,十分轻量化。

  • BMQ:字节的消息队列框架,初期定位是承接高吞吐的离线业务场景,逐步替换掉老的kafka集群。yyds!

kafka

应用场景

上游主要是各种服务,比如:搜索服务,直播服务,订单服务,支付服务等,各种服务产生的日志信息,Metrics数据及用户行为数据,经过kafka中间件处理。

kafka更多的承担一种中间价的角色,实现削峰填谷,防止上游高速的流量击垮下游服务。

概念

kafka的重要概念:

  • broker:消息的集群,包括多个topic。

  • topic: 主题,逻辑队列,不同topic可以建立不同的topic。

  • partition:分区,实际存放消息的位置,一个topic可以包含多个partition。

  • offset:偏移量,消息在partition中的相对位置。

  • producer:消息产生者

  • consumer:消息消费者

BMQ

架构图

image.png

BMQ相对于kafka多了所谓的coordinator(协调者),kafka2.8版本之前都是有第三方zookeeper进行控制的。

问题

  1. kafka如何实现并发? kafka本身的架构决定了其是可以实现并发的,因为生产者和消费者,均可以向不同主题的不同分区下生产消息和消费消息。

  2. kafka的offset怎么管理? 由消费者自己管理,可以使用数据库/redis保存某消费者/消费者上一次消费消息的分区及offset。