1、kafka是什么
关于kafka是什么你一定有自己的答案,中间件、消息队列、消息中间件。这些都没有错,但是并不全面,那么我们直接来看kafka官方给自己的定义吧
Apache Kafka is an open-source distributed event streaming platform used by thousands of companies for high-performance data pipelines, streaming analytics, data integration, and mission-critical applications.
翻译过来就是:Apache Kafka 是一个开源的分布式事件流平台,被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用。
如果把事件流换成消息的话,有一个更为通用的叫法“消息引擎系统”,消息引擎确实比消息队列更能说明kafka在数据处理和传输上的能力,当然 官方最直接的定义是分布式流式处理平台,可见除了在消息引擎(毕竟这个发家的),kafka在大数据处理上的野心。那有人就问了,kafka是消息引擎,那消息引擎是什么呢?
2、消息引擎
那我们就来看看维基百科对消息引擎的定义:消息引擎系统是一组规范。企业利用这组规范在不同系统之间传递语义准确的消息,实现松耦合的异步式数据传递。
通俗来讲就是:系统 A 发送消息给消息引擎系统,系统 B 从消息引擎系统中读取 A 发送的消息。
2.1消息格式
既然消息引擎是用于在不同系统之间传输消息的,那么如何设计消息的格式就很重要了。稍微停顿几秒去思考一下,如果是你,你要如何设计你的消息编码格式。一个比较容易想到的是使用已有的一些成熟解决方案,比如使用 XML、JSON 亦或是 Protocol Buffer;其实 Kafka使用的是纯二进制的字节序列!当然消息还是结构化的,只是在传输之前都要将其转换成二进制的字节序列。
2.2传输模式
消息设计出来之后还不够,还要具体的传输协议,即我用什么方法把消息传输出去。kafka用到了两种方法:
- 点对点模型:也叫消息队列模型。如果拿上面那个“民间版”的定义来说,那么系统 A 发送的消息只能被系统 B 接收,其他任何系统都不能读取 A 发送的消息。日常生活的例子比如电话客服就属于这种模型:同一个客户呼入电话只能被一位客服人员处理,第二个客服人员不能为该客户服务。
- 发布 / 订阅模型:与上面不同的是,它有一个主题(Topic)的概念,你可以理解成逻辑语义相近的消息容器。该模型也有发送方和接收方,只不过提法不同。发送方也称为发布者(Publisher),接收方称为订阅者(Subscriber)。和点对点模型不同的是,这个模型可能存在多个发布者向相同的主题发送消息,而订阅者也可能存在多个,它们都能接收到相同主题的消息。生活中的报纸订阅就是一种典型的发布 / 订阅模型。
3、kafka能做什么
这里笔者列举了一些常见的用法,欢迎评论区补充交流
- 实时数据传输:作为消息队列,Kafka 可以在不同的组件和服务之间传递实时数据,支持高吞吐量的数据流,在数据量激增时实现“削峰填谷”。
- 日志收集与存储:用于收集和存储大规模系统产生的日志数据,支持数据的持久化存储。
- 事件溯源:用于跟踪和记录系统中的事件流,支持追溯和分析系统中发生的事件。
- 消息发布与订阅:支持发布-订阅模型,允许多个消费者同时订阅并处理相同的消息流。
- 解耦系统组件:在大型系统中,Kafka 可以作为中间层,帮助解耦系统的不同组件,提高系统的灵活性和可维护性。
- 流处理:Kafka 提供了流处理支持,可以用于构建实时数据处理应用,例如实时分析、实时计算等。