什么是Kafka
- Apache Kafka是一个开源消息系统,由Scala写成。是由Apache软件基金会开发的一个开源消息系统项目。
- Kafka最初是由LinkedIn开发,并于2011年初开源。2012年10月从Apache Incubator毕业。该项目的目标是为处理实时数据提供一个统一、高通量、低等待的平台。
- Kafka是一个分布式消息队列:生产者、消费者的功能。它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。
- Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接受者称为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)称为broker。
无论是kafka集群,还是producer和consumer都依赖于zookeeper集群保存一些meta信息,来保证系统可用性
在讨论kafka 的特性之前,我们需要理解发布订阅消息的概念及其重要性。在这作者简要说明一下,发布-订阅消息队列的特征是消息的sender(publisher)并不直接将data(message)发送给receiver, publisher 以某种方法对消息进行分类,而receiver (subscriber) 会订阅接收特定类别的消息。Pub/Sub 系统通常会有broker(消息被发布到的中心点)来进行实现,消息将被发送至broker。
Kafka 核心组件
参照下图来看下Kafka的几个核心组件,之后作者会对这些组件进行详细的介绍
- Topic:每一类消息的主题,Kafka将消息按照主题分类
- Producer:发送消息者
- Consumer:消费消息者(必须订阅后才可以消费,一个消费者可以消费1个或多个主题)
- broker:发送的消息保存在一组服务器上,称之为Kafka集群,集群中的每一个Kafka就是一个blocker
Message 和 Batches
Kafka 中最基本的数据单元是消息message,如果使用过数据库,那么可以把Kafka 中的消息理解成数据库里的一条记录。消息是由字符数组组成的,kafka 并不关系它内部是什么,索引消息的具体格式与Kafka 无关。消息可以有一个可选的key,这个key 也是个字符数组,与消息一样,对于kafka 也是透明的。key 用来确定消息