这是我参与「第三届青训营 -后端场」笔记创作活动的第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
架构图
BMQ相对于kafka多了所谓的coordinator(协调者),kafka2.8版本之前都是有第三方zookeeper进行控制的。
问题
-
kafka如何实现并发? kafka本身的架构决定了其是可以实现并发的,因为生产者和消费者,均可以向不同主题的不同分区下生产消息和消费消息。
-
kafka的offset怎么管理? 由消费者自己管理,可以使用数据库/redis保存某消费者/消费者上一次消费消息的分区及offset。