kafka学习(一)初识kafka

文章更新时间:2021/10/28

一、简介

  定义:kafka是一个支持分区、多副本、基于zookeeper协调分布式消息系统,用scala语言编写。

  目的:解耦、削峰、异步、缓冲(生产大于消费的情况)详见这里~

  使用场景:日志收集、消息系统、用户活动跟踪、运营指标分析等。

  PS:消息队列中的消息不是永久存的,会定时删除,自动删除的时间可以配置。

  结构:

二、消息队列通信的模式

  最大的特性就是可以实时的处理大量数据以满足各种需求场景。

pull拉取模式【kafka默认】

  如上图所示是基于拉取或者轮询的消息传送模型。生产者将消息放入消息队列后,由消费者主动的去拉取消息进行消费。

优点:拉取消息的频率可以由自己控制。

存在缺陷:消费者端无法感知消息队列是否有消息需要消费,所以在消费者端需要额外的线程去监控。

push推送模式

  如上图所示是一个基于消息推送的模型,生产者将消息放入消息队列后,队列会将消息推送给订阅过该类消息的消费者(类似微信公众号)。

  由于是消费者被动接收推送,所以无需感知消息队列是否有待消费的消息!但是consumer1、consumer2、consumer3由于机器性能不一样,所以处理消息的能力也会不一样,而消息队列却无法感知消费者消费的速度!所以推送的速度成了发布订阅模模式的一个问题!

  假设三个消费者处理速度分别是8M/s、5M/s、2M/s,如果队列推送的速度为5M/s,则consumer3无法承受!如果队列推送的速度为2M/s,则consumer1、consumer2会出现资源的极大浪费!

优点:消费者无需感知消息队列是否有待消费的消息。

存在缺陷:生产者无法感知消费者机器的性能,容易造成接收溢出或主机资源浪费。

三、kafka相关名词

  • PS:Kafka借鉴了JMS规范的思想,但是却并没有完全遵循JMS规范
  • PS:Kafka没有队列的概念Topic可以看成是队列在kafka中的一种表现形式。

 

 

posted @ 2019-08-28 22:35  有梦想的肥宅  阅读(747)  评论(0编辑  收藏  举报