Kafka简介
Kafka用于构建实时数据管道和流应用程序。 它的特点是水平可伸缩性scalable,容错性,快速性,kafka在数千家公司中投入生产环境使用。比较知名的有Uber,netflix等等,都是利用kafka构建了其业务。
kafka有三个关键特性:
- 发布和订阅stream of records,类似于message queue和enterprise messaging system。
- 以可容错且持久的方式存储record stream。
- 按照流的顺序处理流。
Kafka通常用于两大类应用程序:
- 建立实时流数据管道,让我们可以可靠地在系统或应用程序之间获取数据
- 构建实时流应用程序,让我们可以转换或响应流中的数据
kafka的特点是
- Kafka在一个或多个可以跨越多个数据中心data center的服务器上作为集群运行。
- Kafka集群将stream of record存储在kafka topics中。
- 每个record由一个键key,一个值value和一个时间戳timestamp组成。
kafka提供了下面这些核心的API
- Producer API允许应用程序将记录流发布到一个或多个Kafka的topic当中。
- Consumer API允许应用程序订阅一个或多个topic并处理为其生成的记录流。
- Streams API允许应用程序充当流处理器,使用一个或多个topic的输入流,并生成一个或多个输出topic的输出流,从而有效地将输入流转换为输出流。
- Connector API允许构建和运行将Kafka topic连接到现有应用程序或数据系统的producer或consumer。 例如,关系数据库的connector 可以捕获对表的所有更改。
在Kafka中,客户端和服务器之间的通信是通过简单,高性能,与语言无关的TCP协议完成的。 该协议已版本化,并与旧版本保持向后兼容性。 我们为Kafka提供了Java客户端,但是客户端支持多种语言。
Topic 和log
首先,让我们深入探讨Kafka提供的流记录的核心抽象-topic。
topic是record发布到的一个抽象。 Kafka中的topic始终是支持多个subscriber的; 也就是说,一个topic可以有零个,一个或多个消consumer来subscribe写入该topic的数据。这一点与rabbitmq有本质区别,因为rabbitmq可以定义只能被consume一次的topic。
对于每个topic,Kafka集群都会维护一个分区日志