一、kafka概念
Kafka是由LinkedIn开发的一个分布式的消息系统,最初是用作LinkedIn的活动流(Activity Stream)和运营数据处理的基础。
活动流数据包括页面访问量(Page View)、被查看内容方面的信息以及搜索情况等内容。这种数据通常的处理方式是先把各种活动以日志的形式写入某种文件,然后周期性地对这些文件进行统计分析。
运营数据指的是服务器的性能数据(CPU、IO使用率、请求时间、服务日志等等数据)。运营数据的统计方法种类繁多。
Kafka使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用。目前越来越多的开源分布式处理系统如Cloudera、Apache Storm、Spark都支持与Kafka集成。
综上,Kafka是一种分布式的,基于发布/订阅的消息系统,能够高效并实时的吞吐数据,以及通过分布式集群及数据复制冗余机制(副本冗余机制)实现数据的安全
二、kafka相关名词解释
消息(message)
Kafka 的数据单元,称为 “消息”。消息由键(key)、值(value)组成,键作为元数据,是可选的,值即为消息的内容。消息键与值,都是由字节数组构成,其数据格式完全由客户端控制。
消息写入到 Kafka 时,按照主题和分区分组,以批次(batch)的形式写入。需要根据时间延迟和吞吐量,权衡批次的 “大小”:批次越大,单位时间内处理的消息越多,单个消息的传输时间越长。
生产者(producer) / 消费者(consumer)
作为 “发布与订阅” 架构中的 “发布者”,“生产者” 生产(或 “写入”)消息。
作为 “发布与订阅” 架构中的 “订阅者”,“消费者” 消费(或 “读取”)消息。消费者是 “消费者组”(consumer group)的一部分。
主题(topic) & 分区(partition)
Kafka 的消息通过 “主题” 进行分类。主题能够被划分为若干 “分区”。消息以追加的方式写入分区,并以 FIFO 的方式读取,保证了消息在单个分区内的顺序。
Kafka 支持分区的 “复制机制”,以提供消息冗余,分区的 “实例” 称为 “副本”(replica),其中之一作为 “首领副本”(leader replica)。
broker
Kafka 服务器通常被称为 broker:
- broker 接收来自生产者的消息,并将消息落地到磁盘保存
- broker 接收来自消费者的请求,返回已经落地到磁盘的消息
broker 负责 “消息保留策略”:当消息超过保留时间,或者消息的总量达到大小限制,旧的消息将过期并且被删除。
多个 broker 能够组成 Kafka 集群,其中之一作为 “集群管理器”。单个分区的副本必须位于不同的 broker。
AMQP协议
Advanced Message Queuing Protocol (高级消息队列协议)
The Advanced Message Queuing Protocol (AMQP):是一个标准开放的应用层的消息中间件(Message Oriented Middleware)协议。AMQP定义了通过网络发送的字节流的数据格式。因此兼容性非常好,任何实现AMQP协议的程序都可以和与AMQP协议兼容的其他程序交互,可以很容易做到跨语言,跨平台。