kafka系列之kafka入门概论(1)

x33g5p2x  于2021-12-19 转载在 其他  
字(2.3k)|赞(0)|评价(0)|浏览(388)

kafka入门概论

什么是消息中间件

举个例子,生产者消费者,生产者生产鸡蛋,消费者消费鸡蛋,生产者生产一个鸡蛋,消费者就消费一个鸡蛋,假设消费者消费鸡蛋的时候噎住了(系统宕机了),生产者还在生产鸡蛋,那新生产的鸡蛋就丢失了。再比如生产者很强劲(大交易量的情况),生产者1秒钟生产100个鸡蛋,消费者1秒钟只能吃50个鸡蛋,那要不了一会,消费者就吃不消了(消息堵塞,最终导致系统超时),消费者拒绝再吃了,”鸡蛋“又丢失了,这个时候我们放个篮子在它们中间,生产出来的鸡蛋都放到篮子里,消费者去篮子里拿鸡蛋,这样鸡蛋就不会丢失了,都在篮子里。

而这个篮子就是”消息中间件“,顾名思义,首先是中间件,然后是用来存储消息的中间件。
这里鸡蛋其实就是“数据流”,系统之间的交互都是通过“数据流”来传输的(就是tcp、https什么的),也称为报文,也叫“消息”。消息队列满了,其实就是篮子满了,”鸡蛋“ 放不下了,那赶紧多放几个篮子,其实就是扩容。所以消息中间件就是那个篮子。

因为对消息中间件的定位原因,所以我们对它有着一定的要求,例如消息的发布模型、容错、高吞吐高性能、扩容、安全、数据不丢失等等。

消息传输模型
点对点模型

  • 也叫消息队列模型。如果拿上面那个“民间版”的定义来说,那么系统 A 发送的消息只能被系统 B 接收,其他任何系统都不能读取 A 发送的消息,。日常生活的例子比如电话客服就属于这种模型:同一个客户呼入电话只能被一位客服人员处理,第二个客服人员不能为该客户服务
发布/订阅模型

  • 与上面不同的是,它有一个主题(Topic)的概念,你可以理解成逻辑语义相近的消息容器。该模型也有发送方和接收方,只不过提法不同。发送方也称为发布者(Publisher),接收方称为订阅者(Subscriber)
  • 和点对点模型不同的是,这个模型可能存在多个发布者向相同的主题发送消息,而订阅者也可能存在多个,它们都能接收到相同主题的消息。生活中的报纸订阅就是一种典型的发布 / 订阅模型。
选择合适的消息引擎
  • 如果在你的场景中,消息处理逻辑非常复杂,处理代价很高,同时你又不关心消息之间的顺序,那么传统的消息中间件是比较合适的;
  • 反之,如果你的场景需要较高的吞吐量,但每条消息的处理时间很短,同时你又很在意消息的顺序,此时,Kafka 就是你的首选。

什么是kafka

  • Apache Kafka 是一款开源的消息引擎系统。消息引擎系统是一组规范。企业利用这组规范在不同系统之间传递语义准确的消息,实现松耦合的异步式数据传递。
  • Kafka 能够有效隔离上下游业务,将上游突增的流量缓存起来,以平滑的方式传导到下游子系统中,避免了流量的不规则冲击
  • Apache Kafka 是消息引擎系统,也是一个分布式流处理平台
kafka名字的来源:因为 Kafka 系统的写性能很强,所以找了个作家的名字来命名似乎是一个好主意。kafka 的作者大学期间我上了很多文学课,非常喜欢 Franz Kafka 这个作家,另外为开源软件起这个名字听上去很酷。

使用场景

解耦

这个是消息中间件或者消息系统比较基本的功能,可以解耦两个系统或者多个系统之间的紧耦合关系

削峰填谷
  • 峰填谷指缓冲上下游瞬时突发流量,使其更平滑
  • 特别是对于那种发送能力很强的上游系统,如果没有消息引擎的保护,“脆弱”的下游系统可能会直接被压垮导致全链路服务“雪崩”。
  • 一旦有了消息引擎,它能够有效地对抗上游的流量冲击,真正做到将上游的“峰”填满到“谷”中,避免了流量的震荡。
  • 消息引擎系统的另一大好处在于发送方和接收方的松耦合,这也在一定程度上简化了应用的开发,减少了系统间不必要的交互。
分布式流媒体平台

其实如果将kafka定义为消息中间件,其实是有失偏颇的,因为随着kafka streams 的功能完善,kafka 本身已经具有了处理消息的实时能力——实时流处理,而且支持DSL,所以在我们构建流处理平台的时候我们可以将其考虑进去

  • 构建可在系统或应用程序之间可靠获取数据的实时流数据管道
  • 构建转换或响应数据流的实时流应用程序

名词解释

消息

Kafka是消息引擎,这里的消息就是Kafka处理的主要对象,也是kafka 存储的对象

主题 Topic

主题就是承载消息的逻辑容器,在实际应用中多用于区分具体业务

消息位移Offset

表示分区中每条消息的位置信息,是一个单调递增不变的值。

副本Replica

Kafka中一条消息能够被拷贝到多个地方以提供数据冗余,这些地方就是所谓的副本。副本还分为领导者副本和追随者副本,各自有不同的角色划分。副本是在分区层级下的,即每个分区可配置多个副本实现高可用。

生产者Producer

向主题发布新消息的应用程序。

消费者 Consumer

从主题订阅新消息的应用程序。

消费者位移:Consumer Offset

表示消费者消费进度,每个消费者都有自己的消费者位移。

消费者组:Consumer Group

多个消费者实例共同组成的一个组,同时消费多个分区实现高吞吐。

重平衡:Rebalance

消费者组内某个消费者实例挂掉后,其它消费者实例自动重新分配订阅主题分区的过程。Rebalance 是kafka消费者端实现高可用的重要手段

kafka四个核心API

  • 应用程序使用 Producer API 发布消息到1个或多个topic(主题)中。
  • 应用程序使用 Consumer API 来订阅一个或多个topic,并处理产生的消息。
  • 应用程序使用 Streams API 充当一个流处理器,从1个或多个topic消费输入流,并生产一个输出流到1个或多个输出topic,有效地将输入流转换到输出流。
  • Connector API 可构建或运行可重用的生产者或消费者,将topic连接到现有的应用程序或数据系统。例如,连接到关系数据库的连接器可以捕获表的每个变更。

相关文章