传统消息队列

在信息系统传输信息中,不可能依靠某一性能来决定先后顺序,应该统一按照先来后到排队。

Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于

大数据实时处理领域。

在传统消息队列中分为两种,一种是同步消息队列,即让用户等待流程完成:

kafka如何生产和消费消息 kafka消息消费模式_kafka


一种叫异步消息队列,即你的请求我收到了,我先给你弄着,你先去忙其他的事情吧:

kafka如何生产和消费消息 kafka消息消费模式_消息队列_02

消息队列最大的优点有两个:解耦与削峰。同时还有很多其他优点:

  • 解耦
    允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。
  • 可恢复性
    系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所
    以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。
  • 缓冲
    有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致
    的情况。
  • 灵活性 & 峰值处理能力
    在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见。
    如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。
  • 异步通信
    很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户
    把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。

消费模式

消息队列中服务端(消费者)获取队列中客户端(生产者)发送的信息的行为被称为消费。
消费模式主要分为两种:

点对点模式

kafka如何生产和消费消息 kafka消息消费模式_kafka如何生产和消费消息_03

队列中的一条消息由一个专门的消费者进行消费,消费者受到这条消息并确认后,队列就会删除这条消息,防止重复访问。

发布/订阅模式

kafka如何生产和消费消息 kafka消息消费模式_kafka如何生产和消费消息_04


生产者将数据推送入队列,同一条消息会被所有消费者消费,而消费有两种情况:

  • 消费者主动拉取消息(消费者饿了会自己吃饭,吃饱了就不吃了)
  • 队列向消费者推送消息(队列主动喂消费者,消费者要么撑死,要么饿死)

kafka选择的是消费者拉取消息,这样可以保证消费者处理自己可以处理的消息量。