一、Kafka——分布式流平台
- 类似于一个消息队列或者企业消息系统,可以发布和订阅记录流
- 以容错的方式存储流记录
- 记录流发生时即进行处理
因此
Kafka通常用于两大类应用:
- 构建可在系统或应用程序之间可靠获取数据的实时流数据管道
- 构建转换或响应数据流的实时流应用程序
Kafka的核心API有以下四个:
- 生产者api ,用于发布消息到一个或多个Kafka主题上
- 消费者api,允许应用程序订阅一个或多个主题并处理为其生成的记录流
- Streams API允许应用程序充当流处理器,使用来自一个或多个主题的输入流并生成到一个或多个输出主题的输出流,从而有效地将输入流转换为输出流。
- Connector API 允许构建和运行 已连接至应用程序或者数据库的可重用的生产者或者消费者。 例如,关系数据库的连接器可能捕获对表的每个更改。
二、Kafka的一般架构
一个典型的 kafka 集群包含若干 Producer,若干个 Broker、若干个 Consumer Group,以及一个 zookeeper 集群。
kafka 通过 zookeeper 管理集群配置及服务协同。
Producer 使用 push 模式将消息发布到 broker, consumer 通过监听使用 pull 模式从broker 订阅并消费消息。多个 broker 协同工作, producer 和 consumer 部署在各个业务逻辑中。三者通过zookeeper 管理协调请求和转发。这样就组成了一个高性能的分布式消息发布和订阅系统。
如下图所示,一个典型的 Kafka 集群中包含若干 Producer,若干 broker,若干 Consumer,以及一个Zookeeper集群。Kafka 通过 Zookeeper 管理集群配置,选举 leader,以及在 Consumer Group 发生变化时进行 rebalance。Producer 使用 push 模式将消息发布到 broker,Consumer 使用 pull 模式从 broker 订阅并消费消息。
三、topics&partition
Kafka 的消息通过topic进行分类。topic就好比数据库的表,或者文件系统里的文件夹。
topic可以被分为若干个partition , 一个partition就是一个提交日志。消息以追加的方式写入partition,然后以先入先出的顺序读取。要注意,由于一个topics一般包含几个partition,因此无法在整个topics范围内保证消息的顺序,但可以保证消息在单个partition内的顺序
本来想写一个demo的,但是kafka的坑有点多,暂时没弄出来