Kafka学习笔记(一):Kafka是什么

352 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情

kafka是很多公司技术选型的热门选手,虽然在实际使用时,公司已经封装好了sdk,我们只需要简单地调用 api 生产数据或者消费数据,但在遇到问题时,还需要我们对 kafka 有更多更深的理解。

kafka的起源

学习 kafka,首先了解它的起源。

kafka 起源于 LinkedIn,后来于2011年成为开源 Apache 项目,由 Apache 软件基金会开发的一个开源流处理平台,由 Scala 和 Java 编写。

Linkedln 为什么要开发 kafka 呢? 大约在2010年前后,LinkedIn 的研发团队重新设计项目架构,为了适应不断增长的用户量和系统复杂度,系统架构从原来的单体应用转变成多个微服务。微服务之间需要执行多种类型的数据处理与分析,比如业务系统和应用程序性能监控,以及用户数据处理等。这个转变在带来好处的同时,也导致需要另外开发一个中间层,解决实时访问数据的问题。LinkedIn 工程师起初使用了 ActiveMQ,但 ActiveMQ 无法完全满足需求,因此,LinkedIn 工程师便着手开发了 kafka。

kafka 之所以被命名为 kafka, 是因为 kafka 的作者之一 Jay Kreps 在大学期间很喜欢作家 Franz Kafka,而且 kafka 的写性能很强,和作家刚好有某种关联。

kafka是什么

作为消息系统

这是所有消息队列最基本的用处,也是kafka最主要的用处。

什么是消息系统,消息系统有什么用,简单来说,系统 A 发送消息给消息系统,系统 B 从消息系统中读取 A 发送的消息。

为什么系统A不直接发送消息给系统B,而还要一层中间层呢?我们使用消息系统,可以异步处理复杂请求,还可以削峰填谷。

  • 异步处理:一个系统接收一个请求,需要进行比较复杂的操作,比较耗时,响应慢,给用户造成不好的体验。引入消息队列,将不是必须的业务逻辑,异步处理。因为写入消息队列的速度很快,基本可以忽略,所以可以及时的给到用户一个响应。
  • 削峰填谷:高峰期,每秒会有大量的请求,可能导致相关系统无法处理请求甚至崩溃。而加入消息队列后,系统可以从消息队列中取数据,相当于消息队列做了一次缓冲。请求先入消息队列,而不是由业务处理系统直接处理,减少了业务处理系统的压力。

作为存储系统

数据写入 kafka 后会被写到磁盘,同时进行备份以便容错,且 kafka 能存储大容量的数据,因此 kafka 也可以作为存储系统。不过在实际生产环境中,一般不会将 kafka 当做持久化存储来用。

作为流式处理平台

今天 Apache Kafka 是和 Apache Storm、Apche Spark 和 Apache Flink 同等级的实时流处理平台。笔者经验有限,还没有见过将kafka用作流式处理平台的,但我们需要了解到Kafka也提供了流处理组件 Kafka Streams。

参考