← 返回展厅
Kafka

Kafka

年份:2011
平台:跨平台
开发者:LinkedIn / Jay Kreps

高吞吐分布式消息队列,重新定义实时数据流处理。

浏览:7
点赞:0

简要介绍

【互联网纪元厅】

2011年,Kafka正式问世。由LinkedIn / Jay Kreps主导开发,面向跨平台平台用户。

高吞吐分布式消息队列,重新定义实时数据流处理。

技术特色:消息队列、流处理、大数据。

影响力评估:技术维度 9/10,商业维度 8/10,文化维度 5/10,用户维度 8/10。

作为互联网纪元厅的经典代表,Kafka在软件发展史上留下了深刻的印记。

详细介绍

2011年,当Jay Kreps在LinkedIn的办公室里写下Kafka的第一行代码时,他或许并未预见到,这个最初只是为了解决内部数据管道问题的系统,将在未来十年里彻底改变企业处理实时数据的方式。Kafka的诞生,恰逢大数据浪潮从萌芽走向爆发的转折点——Hadoop刚刚成为处理海量静态数据的标准工具,但实时数据流处理仍是一片几乎空白的领域。传统消息队列如RabbitMQ、ActiveMQ在吞吐量上徘徊在每秒几千条消息的水平,而LinkedIn面临的挑战是:每天需要处理超过千亿条用户行为日志和系统监控数据,这些数据来自网站的每一次点击、每一次搜索、每一次页面加载,它们像一条条细流汇聚成数据洪流,而当时的消息系统根本无法承载这样的流量。

这个故事的起点,要从LinkedIn的“数据管道之痛”说起。2008年前后,LinkedIn的工程师们意识到,他们需要一种能够统一收集、传输和分发海量事件数据的系统。当时,公司内部同时运行着多个独立的日志收集系统,每个系统都有自己的格式、存储方式和传输机制,数据孤岛现象严。更糟糕的是,这些系统的可靠性参差不齐,数据丢失是家常便饭。Jay Kreps当时是LinkedIn的数据基础设施团队负责人,他和同事Neha Narkhede、Jun Rao共同承担起设计新系统的重任。Kreps曾回忆说,他们一开始尝试过使用现成的消息队列,但很快发现这些系统在吞吐量、持久化和水平扩展方面都存在根本性的局限。RabbitMQ基于AMQP协议,虽然功能丰富,但每条消息都需要经过复杂的路由和确认机制,导致性能瓶颈;ActiveMQ则依赖数据库存储消息,在高并发下成为性能短板。

Kreps的灵感来源颇为独特。他在研究分布式系统时,偶然读到了“日志”这个概念在分布式系统中的应用——这里的“日志”不是指应用程序的日志文件,而是指一种追加写入的、不可变的、按时间排序的记录序列。这种思想在数据库领域早已存在,比如MySQL的binlog、PostgreSQL的WAL,它们都是通过追加日志来实现事务的持久化和复制。Kreps意识到,如果将消息队列也设计成一种追加日志的结构,就能从根本上解决吞吐量问题:写入操作只需要追加到文件末尾,无需随机寻道;读取操作则通过偏移量来定位,支持高效的批量消费。这个想法直接催生了Kafka的核心架构——一个分布式、持久化的追加日志系统。

Kafka这个名字的由来,本身就带着一丝文学色彩。Kreps曾在一篇博客中解释,他非常喜欢作家弗朗茨·卡夫卡的作品,尤其是《审判》和《城堡》中那种荒诞而结构化的叙事风格。他觉得写代码就像写小说一样,需要清晰的结构和严谨的逻辑。于是,这个以“写代码如写小说”为精神内核的系统,被命名为Kafka。这个命名后来成为科技圈津津乐道的话题,甚至有人开玩笑说,Kafka的用户应该被称为“卡夫卡主义者”。

2011年,Kafka 0.7.0版本作为LinkedIn的内部项目首次发布。这个版本虽然功能简陋——只支持基本的发布-订阅模式,没有复制功能,也没有消费者组的概念——但它已经展现出惊人的性能:在单台机器上就能达到每秒数万条消息的吞吐量,远超当时的任何消息队列。更重要的是,Kafka的设计理念是“让数据持久化”,而不是像传统消息队列那样在内存中暂存消息。它把数据直接写入磁盘,利用操作系统的页缓存来加速读写,这种设计在当时被视为“疯狂”,因为磁盘I/O一直被认为是性能瓶颈。但Kreps团队通过大量实验证明,对于顺序写入的场景,磁盘的吞吐量可以媲美甚至超过网络传输。

Kafka的开源之旅始于2011年底。LinkedIn决定将其贡献给Apache软件基金会,这一决定背后既有战略考量,也有社区文化的推动。当时,LinkedIn已经深度依赖Hadoop和ZooKeeper等开源项目,公司高层意识到,将Kafka开源不仅能获得社区贡献,还能吸引更多企业采用,从而巩固LinkedIn在大数据领域的影响力。2012年,Kafka正式成为Apache孵化器项目,同年发布的0.8.0版本引入了复制功能,这是Kafka走向生产就绪的关键一步。复制功能允许数据在多个broker之间自动备份,即使某个节点宕机,数据也不会丢失。这个版本还引入了消费者组的概念,使得多个消费者可以并行消费同一个主题,大幅提升了消费吞吐量。

Kafka的技术创新,可以归纳为几个关键设计。首先是分区机制。每个主题被划分为多个分区,每个分区是一个有序的、不可变的日志序列。分区是Kafka并行处理的基本单位,不同的分区可以分布在不同的broker上,从而实现水平扩展。当生产者发送消息时,可以指定分区键,Kafka会根据键的哈希值将消息路由到特定分区,从而保证同一键的消息总是被顺序写入。这种设计使得Kafka能够轻松扩展到数百台服务器,处理每秒数百万条消息。

其次是日志分段存储。Kafka的每个分区日志被划分为多个日志段,每个日志段是一个文件,大小通常为1GB或1周的时间窗口。当日志段达到阈值时,Kafka会关闭当前段并创建新段。这种设计带来了两个好处:一是旧的日志段可以被压缩或删除,实现数据生命周期管理;二是Kafka可以高效地清理过期数据,只需删除整个文件,无需进行复杂的随机删除操作。Kafka还支持“日志压缩”功能,对于同一键的重复消息,只保留最新的一条,这在状态恢复场景中非常有用。

第三是零拷贝技术。Kafka在发送消息给消费者时,利用了操作系统的sendfile系统调用,直接从磁盘文件读取数据并发送到网络套接字,无需经过用户空间的内存拷贝。这种技术将数据从磁盘到网络的路径缩短到极致,使得Kafka在单台机器上就能达到接近网卡带宽的吞吐量。据说,在LinkedIn的生产环境中,一台Kafka broker能够以每秒1GB的速度传输数据,而CPU占用率却不到20%。

Kafka的发展历程,是一部从内部工具到生态核心的进化史。2013年,Kafka 0.8.1版本引入了Kafka Connect的概念,这是一个用于连接外部系统的框架,允许用户通过简单的配置将Kafka与数据库、文件系统、搜索引擎等集成。同年,LinkedIn开源了Samza,这是一个基于Kafka的流理框架,标志着Kafka开始从消息队列向流处理平台演进。2014年,Kafka 0.9.0版本推出了全新的消费者API,取代了之前基于ZooKeeper的消费者协调机制,大幅简化了客户端开发。这个版本还引入了Kafka Streams,这是一个轻量级的流处理库,允许开发者直接在应用程序中编写流处理逻辑,无需部署独立的流处理集群。

2015年,Kafka迎来了一个里程碑事件:Confluent公司的成立。Jay Kreps、Neha Narkhede和Jun Rao从LinkedIn离职,共同创立了Confluent,旨在为Kafka提供商业支持和企业级功能。Confluent的成立加速了Kafka的发展,公司推出了Kafka Schema Registry、Kafka REST Proxy等工具,并开始提供托管服务Confluent Cloud。2017年,Kafka 1.0.0版本发布,标志着项目进入成熟稳定期。此时,Kafka已经不再只是一个消息队列,而是演变为一个完整的“事件流平台”。同年,Apache Kafka成为Apache软件基金会的顶级项目,其社区活跃度在Apache项目中排名前列。

Kafka的市场影响力,可以用几个数字来概括。截至2020年,超过80%的财富500强企业使用了Kafka,包括Uber、Netflix、Spotify、Airbnb、Twitter、LinkedIn等几乎所有知名的互联网公司。在Uber,Kafka每天处理超过1000亿条事件,用于实时定价、司机分配、安全监控等场景。在Netflix,Kafka是微服务架构的核心通信总线,用于记录用户行为、监控系统状态、触发自动化运维操作。在Spotify,Kafka用于实时音乐推荐和用户行为分析。据Confluent估计,全球Kafka的生产部署数量超过10万个,每天处理的事件数超过万亿条。

Kafka的竞争格局也很有趣。传统消息队列如RabbitMQ、ActiveMQ在Kafka面前显得力不从心,但Kafka并非没有对手。2015年,Apache Pulsar项目启动,它采用了类似Kafka的分区日志架构,但引入了计算与存储分离的设计,能够更好地支持多租户和云原生部署。2019年,AWS推出了Amazon MSK(Managed Streaming for Apache Kafka),这是一项托管的Kafka服务,降低了Kafka的运维复杂度。2020年,Redpanda出现,这是一个兼容Kafka API但用C++重写的高性能消息系统,号称比Kafka快10倍。然而,Kafka凭借其庞大的生态系统和社区支持,依然保持着主导地位。

Kafka的文化遗产,体现在它重新定义了“事件流”这个技术品类。在Kafka之前,“消息队列”只是一个基础设施组件,用于解耦生产者和消费者。在Kafka之后,“事件流平台”成为企业数据架构的核心,它不仅是数据传输的管道,更是数据存储、处理和分析的统一平台。Kafka的日志架构思想,影响了后来的许多系统,包括Apache Flink、Apache Beam、Apache Druid等。Kafka还催生了“事件溯源”和“CQRS”架构模式的流行,许多企业开始将业务数据以事件的形式持久化到Kafka中,而不是直接写入数据库。

在Kafka的社区文化中,有一些有趣的轶事。据说,Kafka的吉祥物是一只名叫“Kafka”的猫,因为Jay Kreps养了一只叫Kafka的猫。在Kafka的早期版本中,有一个著名的bug叫做“Kafka的幽灵”,表现为消费者偶尔会收到重复的消息,这个问题困扰了社区很长时间,最终被定位为ZooKeeper会话超时导致的消费者重平衡问题。还有一个广为流传的故事:LinkedIn的一位工程师在调试Kafka时,发现消息的消费延迟突然飙升到几分钟,经过数小时排查,最终发现是机房里的一个空调故障导致服务器温度过高,CPU自动降频。这个事件后来被写入了Kafka的运维手册,提醒用户注意环境温度对性能的影响。

如今,Kafka已经走过了十多年的历程。它从一个解决具体问题的内部工具,成长为支撑全球数字经济的核心基础设施。当你在Uber上叫车,在Netflix上看剧,在Spotify上听歌,甚至在银行APP上查看交易记录时,背后很可能都有Kafka在默默处理着实时数据流。Kafka的故事告诉我们,好的技术往往源于对现实问题的深刻理解,而非对流行概念的追逐。Jay Kreps曾说:“Kafka的成功,是因为我们选择了正确的抽象。”这个抽象就是日志——一种简单而强大的数据结构,它让数据的存储和传输变得像写日记一样自然。而Kafka本身,也成为了科技史上一个值得铭记的注脚。

深度研究

影响力评价

技术影响商业影响文化影响用户规模8889
8.3
综合影响力评分
评分基于技术、商业、文化、用户四个维度的综合考量
🔧技术创新
显著8/10

对技术发展和工程实践的推动程度

💼商业影响
显著8/10

对商业模式和市场格局的影响深度

🎭文化遗产
显著8/10

在科技文化和社会层面的持久影响力

👥用户覆盖
卓越9/10

用户群体的广度和普及程度

评论区 (0)

登录 后参与评论

加载中...