kafka学习笔记系列——小试牛刀

kafka是什么?

一句话概括:Apache Kafka 是一款开源的分布式消息引擎系统,使用纯二进制的字节序列来传输消息,支持点对点模型(如客服电话)、发布/订阅模型(如报纸订阅)。

复制代码
   引擎:具备某种能量转换传输的能力; 
   消息引擎:将上游的巨大能力平稳的输出到下游 
   
   消息系统:不是很恰当,它片面强调了消息主体的作用,而忽视了这类系统引以为豪的消息传递属

最基础的消息引擎:系统 A 发送消息给消息引擎系统,系统 B 从消息引擎系统中读取 A 发送的消息。

既然消息引擎是用于在不同系统之间传输消息的,那么如何设计待传输消息的格式从来都是一等一的大事。试问一条消息如何做到信息表达业务语义而无歧义,同时它还要能最大限度地提供可重用性以及通用性?

kafka中消息还是结构化的,只是在使用之前都要将其转换成二进制的字节序列。

常见的两种消息传输方法:

  1. 点对点模型:也叫消息队列模型。系统 A 发送的消息只能被系统 B 接收,其他任何系统都不能读取 A 发送的消息。日常生活的例子比如电话客服就属于这种模型:同一个客户呼入电话只能被一位客服人员处理,第二个客服人员不能为该客户服务。
  2. 发布/订阅模型:有一个主题(Topic)的概念,你可以理解成逻辑语义相近的消息容器。该模型也有发送方和接收方,向主题发布消息的客户端应用程序称为生产者(Producer),生产者程序通常持续不断地向一个或多个主题发送消息,而订阅这些主题消息的客户端应用程序就被称为消费者(Consumer)。消费者也能够同时订阅多个主题的消息。 发送方也称为发布者(Publisher),接收方称为订阅者(Subscriber)。和点对点模型不同的是,这个模型可能存在多个发布者向相同的主题发送消息,而订阅者也可能存在多个,它们都能接收到相同主题的消息。生活中的报纸订阅就是一种典型的发布 / 订阅模型。

kafka支持上述两种模型。

我们把生产者和消费者统称为客户端(Clients)。可以同时运行多个生产者和消费者实例,这些实例会不断地向 Kafka 集群中的多个主题生产和消费消息。

有客户端自然也就有服务器端。Kafka 的服务器端由被称为 Broker 的服务进程构成,即一个 Kafka 集群由多个 Broker 组成,Broker 负责接收和处理客户端发送过来的请求,以及对消息进行持久化。

虽然多个 Broker 进程能够运行在同一台机器上,但更常见的做法是将不同的 Broker 分散运行在不同的机器上,这样如果集群中某一台机器宕机,即使在它上面运行的所有 Broker 进程都挂掉了,其他机器上的 Broker 也依然能够对外提供服务。这其实就是 Kafka 提供高可用的手段之一。

为什么需要消息引擎系统?

答案就是"削峰填谷",上下游(由于业务性质的不同所导致的)处理速度不匹配,所以需要消息队列来做缓冲。

所谓的"削峰填谷"就是指缓冲上下游瞬时突发流量,使其更平滑。特别是对于那种发送能力很强的上游系统,如果没有消息引擎的保护,"脆弱"的下游系统可能会直接被压垮导致全链路服务"雪崩"。但是,一旦有了消息引擎,它能够有效地对抗上游的流量冲击,真正做到将上游的"峰"填满到"谷"中,避免了流量的震荡。

消息引擎系统的另一大好处在于发送方和接收方的松耦合,这也在一定程度上简化了应用的开发,减少了系统间不必要的交互。

相关推荐
源代码•宸1 小时前
Leetcode—513. 找树左下角的值【中等】
经验分享·算法·leetcode·面试·职场和发展·golang·dfs
Jastep2 小时前
零帧起步,手搓一个AI面试agent
ai·面试
007php0073 小时前
mac笔记本中在PHP中调用Java JAR包的指南
java·ide·python·面试·职场和发展·pycharm·php
白日与明月5 小时前
面试备考-Hive窗口函数
hive·面试·职场和发展
源代码•宸5 小时前
GoLang八股(Go并发)
服务器·面试·golang·cap·gmp·三色标记法·混合写屏障
Anastasiozzzz5 小时前
Redis脑裂问题--面试坑点【Redis的大脑裂开?】
java·数据库·redis·缓存·面试·职场和发展
源代码•宸5 小时前
Golang原理剖析(彻底理解Go语言栈内存/堆内存、Go内存管理)
经验分享·后端·算法·面试·golang·span·mheap
阿蒙Amon5 小时前
C#每日面试题-break、continue和goto的区别
java·面试·c#
阿蒙Amon6 小时前
C#每日面试题-简述this和base的作用
java·面试·c#
indexsunny6 小时前
互联网大厂Java求职面试实战:Spring Boot、微服务与Redis缓存技术解析
java·spring boot·redis·微服务·面试·电商·技术栈