什么是Kafka
Apache Kafka是一个分布式流处理平台,由LinkedIn开发并开源,后来成为Apache软件基金会的顶级项目。Kafka主要用于构建实时数据管道和流式应用程序。
Kafka 架构
从下面3张架构图中可以看出Kafka Server 实际扮演的是Broker的角色, 一个Kafka Cluster由多个Broker组成, 或者可以说是多个Topic组成。
图 1
图 3
主要概念(Main Concepts)和术语(Terminology)
Kafka Cluster
一个Kafka集群是一个由多个Kafka代理组成的分布式系统,它们协同工作以处理实时流数据的存储和处理。它为大规模应用程序中高效的数据流和消息传递提供了容错性、可扩展性和高可用性。
Broker
Broker是构成Kafka集群的服务器。 每个Broker负责接收、存储和提供数据。 它们处理来自生产者和消费者的读写操作。 Broker还管理数据的复制以确保容错性。
Topic and Partitions
Kafka中的数据被组织成主题(Topics),这些是生产者发送数据和消费者读取数据的逻辑通道。每个主题被划分为分区(partitions),它们是Kafka中并行处理的基本单位。分区允许Kafka通过在多个Broker 之间分布数据来水平扩展。
Producers
生产者是发布(写入)数据到Kafka主题的客户端应用程序。它们根据分区策略将记录发送到适当的主题和分区,分区策略可以是基于键(key-based)或轮询(round-robin)。
Consumers
消费者是订阅Kafka主题并处理数据的客户端应用程序。它们从主题中读取记录,并且可以是消费者组的一部分,这允许负载均衡和容错。每个组中的消费者从一组独特的分区中读取数据。
Zookeeper
ZooKeeper是一个集中式服务,用于维护配置信息、命名、提供分布式同步和提供群组服务。在Kafka中,ZooKeeper用于管理和协调Kafka Broker。ZooKeeper被展示为与Kafka集群交互的独立组件。
Offsets
偏移量(offsets)是分配给分区中每条消息的唯一标识符。消费者将使用这些偏移量来跟踪他们在消费主题中消息的进度。
Kafka vs RabbitMQ
相同点
- 消息队列功能
- Kafka和RabbitMQ都是流行的消息队列工具,支持生产者-消费者模式,能够解耦系统,提高系统的可扩展性和可靠性。
- 异步通信
- 两者都支持异步通信,允许生产者发送消息后立即返回,消费者可以异步处理消息。
- 多种消息传递模式
- 均支持点对点(P2P)和发布/订阅(Pub/Sub)模式。
- 持久化支持
- Kafka和RabbitMQ都支持消息的持久化,以确保在系统故障或重启后消息不会丢失。
- 高可用性
- 两者都支持集群部署,具有高可用性和容错能力。
- 语言支持
- 提供多种语言的客户端库,支持不同编程语言的集成。
不同点
架构和设计
- 数据存储
- Kafka:基于日志分区存储设计,适合高吞吐量的顺序读写。
- RabbitMQ:基于AMQP协议,消息存储在队列中,适合低延迟的场景。
- 消息消费模式
- Kafka:消息由消费者主动拉取,支持多次消费。
- RabbitMQ:消息通过推送方式传递给消费者,消费后消息默认从队列中移除。
- 使用场景
- Kafka:适用于大数据场景(日志聚合、流式处理),擅长处理高吞吐量、大规模消息传递。
- RabbitMQ:适用于需要复杂路