kafka
介绍
kafka是一个分布式数据发布订阅平台。
特点
1. 发布/订阅:类似消息队列或企业消息总线
2. 存储数据:容错、可持久化
3. 处理数据:实时处理
应用
消息系统
传统消息系统有两种模式:队列和发布订阅。队列就是消费者按序读取记录,发布订阅就是记录被广播至所有消费者。
这两种模式都有各自优缺点。队列的优点是允许记录分发在多个消费者,加快消息处理速度,但是消息不能并发读取,只能
一个一个来。发布订阅允许你广播消息至多个处理器,但是由于每个消息都传递给每个订阅者,因此无法扩展处理。
kafka的消费者组可以解决上面的问题。kafka的消费者组概念概括了这两个概念。与队列一样,使用者组允许将处理划分为一组
进程(使用者组的成员)。与发布-订阅一样,Kafka允许您向多个消费者组广播消息。kafka模型的优点是,每个主题都具有这些
属性——它可以扩展处理,而且是多租户。同时kafka比传统消息系统有更强的顺序保证。
概念
1. kafka作为集群可以运行在多个服务器
2. kafka集群存储记录目录的组件叫topics
3. 每条记录(record)包含key、value和timestamp
核心API
Producer API: 允许应用发布记录流到一个或多个kafka主题
Consumer API: 允许应用订阅一个或多个主题,并处理记录流
Stream API: 允许应用作为流处理器,从主题消费数据流,然后往其他主题设置输出数据流
Connector API: 允许构建和运行可重用的生产者和消费者(如一个关系型数据库的connector可以监听表的每次改变)
AdminClient API: 管理和监控topic、broker和其他组件
主题和日志
主题就是一个类别(或目录)记录哪些记录被发布。kafka主题是多订阅者,也即是一个主题可以有0个、1个或多个
消费者订阅主题的数据(即记录)。对于每个主题,kafka cluster维护一个分区日志。每个分区是一个有序的只能追加的有结构
的日志。分区的每条记录都分配一个序号(offset)来唯一标识。
kafka cluster持久化所有发布的记录(不管记录是否被消费),这些记录会设置保留期限。比如如果保留期限为2天,那么2天内记录
是可被消费的,2天后就被丢弃了(释放空间)。Kafka的性能相对于数据大小实际上是恒定的,因此长时间存储数据不成问题。
实际上每个消费者都是基于offset读取记录的,所以消费者可以控制消费记录的顺序(比如可以重置旧offset读前面或后面的记录)。
这些特性决定了消费者加入或退出不会影响集群中其他的消费者。
日志可以分区,不会限制于单台服务器的限制。一个主题可能有多个分区,所以它可以存储更多数据。