《Kafka》1-概述

在平常的开发工作中,大家或多或少的会用到消息中间件。可能是为了解除循环依赖,可能是为了削峰填谷。不管怎么样,消息中间件已经成为开发架构中不可缺少的重要组成部分。

消息中间件有很多选型,包括RabbitMq/RocketMq/ActiveMq/Kafka/。这个系列是主要总结一下胡希老师在极客时间的Kafka核心技术与实践课程。大家像购买的话可以扫描最下方的二维码。

Kafka是什么?

  1. Kafka是一个消息引擎,提供消息传递功能。
  2. Kafka是一个实时流处理引擎,提供实时的流处理能力。

消息引擎

大家习惯把Mq系统叫做消息中间件,是因为在系统架构中,他们承担的角色是业务处理的中间消息传递系统,所以叫消息中间件无可厚非,但是脱离系统整理架构,我们仔细看Kafka,他其实是一个Message System。wiki上对消息引擎的定义如下:

消息引擎是一组规范,企业用这种规范传递语义准确的消息,实现松耦合的异步消息传递。

普通解释:A把消息(record)传递给消息引擎,B从消息引擎获取record。可以把这句话分成两个部分:

  1. 传递的是消息
  2. 消息引擎制定了消息传递的协议规范

消息(record)

语义准确,每个公司的mq消息都不是随便定义的,而是遵从一定的规则,使用相对规范的格式(xml/json)组织消息。

传递协议

消息传递协议

  1. 点对点模式(peer to peer),例如电话服务,只能从A到B,C不能接收到A的服务
  2. 发布/订阅模式(pub/sub),例如报纸订阅,只要订阅了报纸,A/B/C都能收到报纸。消息发布者:publisher。消息订阅者:subscriber

消息引擎的作用

削峰填谷

高TPS环境(秒杀),瞬时访问量会非常大,平时可以正常提供服务的系统可能难以支撑如此打的访问量,为了避免大规模的系统崩溃,我们选用消息引擎缓存访问申请,让业务服务器订阅消费,就像是大坝的工作一样,拦截洪峰,缓慢的输送到下游。

打破循环依赖

还有一种情况,在分布式框架中,多系统协调服务可能会出现循环依赖的问题,A服务依赖B服务,B服务又依赖A服务。这样的情况下,B和A的之间添加消息中间件,解除依赖

缓存

极少情况下,大神这么做

Kafka的组件:

  1. Record:消息
  2. Broker(server):消息引擎服务器,存储消息,备份,持久化
  3. Publisher:消息生产者
  4. Subscriber: 消息订阅者
  5. Clients:客户端,生产者和消费者都是客户端
  6. Topic: 消息主题,可以根据业务分类
  7. Partition:分区,一个消息主题可能有大量的消息存在,为了横向扩展,采用分区的概念
  8. Leader Partition:对应Follower Partition,主分区-副分区,主分区主要接受客户端的写入和消费请求,副分区不做请求处理,只请求主分区,请主分区把消息同步到副分区
  9. Log segment: 日志段,持久化使用,把对消息的读写和消费操作记录到日志文件,日志文件可以切分为多个文件,一个写满了新建一个日志文件。继续写入
  10. 消费者组:多个消费者同时消费同一个主题的消息,A消息只能被组内的消费者消费一次,如果消费者0下线,那么可以剩余的消息可以rebalance到其他的消费者。
  11. 消息位移:消息在分区当中的位置信息
  12. 消费者位移:消费者已经消费到哪个消息的位置信息

以上就是Kafka的主要概览,有兴趣的同学可以扫面下方二维码查看详情。

猜你喜欢

转载自blog.csdn.net/David_lou/article/details/109046206