Apache Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一种快速、可扩展的、设计内在就是分布式的,分区的和可复制的提交日志服务。基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等
1. 架构
Kafka部分名词解释如下:
- 话题(Topic)是特定类型的消息流。消息是字节的有效负载(Payload),话题是消息的分类名或种子(Feed)名。
- 生产者(Producer)是能够发布消息到话题的任何对象。
- 已发布的消息保存在一组服务器中,它们被称为代理(Broker)或Kafka集群。一个Kafka节点就是一个broker,多个broker可以组成一个Kafka集群。
- 消费者可以订阅一个或多个话题,并从Broker拉数据,从而消费这些已发布的消息
- Partition:topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列。
- Segment:partition物理上由多个segment组成
- offset:每个partition都由一系列有序的、不可变的消息组成,这些消息被连续的追加到partition中。partition中的每个消息都有一个连续的序列号叫做offset,用于partition唯一标识一条消息.
- producer发布消息,broker缓存消息,consumer消费消息用来实现消息队列或者消息系统。常用作日志搜集中数据的缓存。
- 发布一个应用读取kafka topic里面的数据,处理完后写入kafka topic里面,实现消息的流式处理。
- 提供一个Connector将kafka 里面的 topoic 数据 连接到已存在的应用或者数据平台中。例如:通过Connector连接到关系型数据库,将每次改变写入到表中。