Kafka 概述
Kafka 最初是由 LinkedIn 即领英公司基于 Scala 和 Java 语言开发的分布式消息发布—订阅系统,现已捐献给 Apache 软件基金会。Kafka 最被广为人知的是作为一个消息队列(MQ)系统存在,而事实上 Kafka 已然成为一个流行的分布式流处理平台。其具有高吞吐、低延迟的特性,许多大数据处理系统比如 Storm、Spark、Flink 等都能很好地与之集成。按照 Wikipedia 上的说法,Kafka 的核心数据结构本质上是一个“按照分布式事务日志架构的大规模发布/订阅消息队列”。总的来讲,Kafka 通常具有 3 重角色:
- 消息系统:Kafka 和传统的消息队列比如 RabbitMQ、RocketMQ、ActiveMQ 类似,支持流量削锋、服务解耦、异步通信等核心功能。
- 流处理平台:Kafka 不仅能够与大多数流式计算框架完美整合,并且自身也提供了一个完整的流式处理库,即 Kafka Streaming。Kafka Streaming 提供了类似 Flink 中的窗口、聚合、变换、连接等功能。
- 存储系统:通常消息队列会把消息持久化到磁盘,防止消息丢失,保证消息可靠性。Kafka 的消息持久化机制和多副本机制使其能够作为通用数据存储系统来使用。
一句话概括:Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),在业界主要应用于大数据实时处理领域。
Kafka 体系结构
如图所示,Kafka 的体系结构中通常包含多个 Producer(生产者)、多个 Consumer(消费者)、多个 Broker(Kafka 服务器)以及一个 ZooKeeper 集群。
体系结构中几个角色: