文章目录
简介
Apache Kafka 是一个开源分布式消息队列平台,用于高性能数据管道、数据传输、数据集成和事件任务处理。
Kafka为C/S架构,服务端服务管理和存储消息、客户端分为生产者和消费者。
应用场景:
1:消息队列,它可以在系统或应用之间可靠地获取数据
2:构建实时流式应用程序
模块:
1:The Producer API 允许一个应用程序发布一串流式的数据到一个或者多个Kafka topic
2:The Consumer API 允许一个应用程序订阅一个或多个 topic ,并且对发布给他们的流式数据进行处理。
3:The Streams API 允许一个应用程序作为一个流处理器,消费一个或者多个topic产生的输入流,然后生产一个输出流到一个或多个topic中去,在输入输出流中进行有效的转换。
4:The Connector API 允许构建并运行可重用的生产者或者消费者,将Kafka topics连接到已存在的应用程序或者数据系统。比如,连接到一个关系型数据库,捕捉表(table)的所有变更内容。
下载
https://kafka.apache.org/downloads
Apache软件下载CDN站点:ttps://dlcdn.apache.org/
基本概念
代理-Broker
broker就像是一个经纪人,全面管理server。broker 接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。broker 为消费者提供服务,对读取分区的请求作出响应,返回已经提交到磁盘上的消息。
单 ServerInstance ,Broker负责为生产者和消费者提供收发服务,多 ServerInstance ,即集群(Cluster)状态下,Broker 既负责服务生产者和消费者,还需要和集群中其他 Broker 协调配合以处理分布式情况下消息的存储和读取。
- Kafka 集群包含一个或多个服务器,每一个服务器节点称为broker。
- broker存储topic的数据。如果某topic有N个partition,集群有N个broker,那么每个broker存储该topic的一个partition。
- 如果某topic有N个partition,集群有(N+M)个broker,那么其中有N个broker存储该topic的一个partition,剩下的M个broker不存储该topic的partition数据。
- 如果某topic有N个partition,集群中broker数目少于N个,那么一个broker存储该topic的一个或多个partition。在实际生产环境中,尽量避免这种情况的发生,这种情况容易导致Kafka集群数据不均衡。
主题-Topic
消息按照主题进行归类。
主题由用户自定义,并配置在Kafka服务器,用于建立生产者和消费者之间的订阅关系,生产者将消息发送到指定的Topic,然后消费者再从该Topic下去取消息。
Kafka中的Topics总是多订阅者模式,一个topic可以拥有一个或者多个消费者来订阅它的数据。
每个topic将被分成多个partition(区),每个partition在存储层面是append log文件。任何发布到此partition的消息都会被直接追加到log文件的尾部,每条消息在文件中的位置称为offset(偏移量),offset为一个long型数字,它唯一标记一条消息。
分区-Partition
分区,用于主题分片存储。
消息分区,一个Topic下面会有多个Partition,每个Partition都是一个有序队列,Partition中的每条消息都会被分配一个有序的id。每个topic至少有一个partition。
一个 Topic 可以包含多个 Partition。每个 Partition 存储了该 Topic 的一部分消息数据。
生产者-Producer
生产者可以将数据发布到所选择的topic(主题)中。生产者负责将记录分配到topic的哪一个 partition(分区)中。可以使用循环的方式来简单地实现负载均衡,也可以根据某些语义分区函数(例如:记录中的key)来完成。下面会介绍更多关于分区的使用。
消费者-Consumer
消费者使用一个 消费组 名称来进行标识,发布到topic中的每条记录被分配给订阅消费组中的一个消费者实例.消费者实例可以分布在多个进程中或者多个机器上。
如果所有的消费者实例在同一消费组中,消息记录会负载平衡到每一个消费者实例。
如果所有的消费者实例在不同的消费组中,每条消息记录会广播到所有的消费者进程。