最近在搭建一个简易的基于Flink的实时推荐系统中用到了kafka,就快速的整合了下并记录在此
简介
什么是Kafka
Apache Kafka是一个分布式发布 - 订阅消息系统和一个强大的队列,可以处理大量的数据,并使您能够将消息从一个端点传递到另一个端点。 Kafka适合离线和在线消息消费。 Kafka消息保留在磁盘上,并在群集内复制以防止数据丢失。 Kafka构建在ZooKeeper同步服务之上。 它与Apache Storm和Spark非常好地集成,用于实时流式数据分析。
术语
-
Broker:Kafka 集群包含一个或多个服务器,这种服务器被称为 broker。
-
Topic:每条发布到 Kafka 集群的消息都有一个类别,这个类别被称为 Topic。(物理上不同 Topic 的消息分开存储,逻辑上一个 Topic 的消息虽然保存于一个或多个 broker 上,但用户只需指定消息的 Topic 即可生产或消费数据而不必关心数据存于何处)。
-
Partition:Partition 是物理上的概念,每个 Topic 包含一个或多个 Partition。
-
Producer:负责发布消息到 Kafka broker。
-
Consumer:消息消费者,向 Kafka broker 读取消息的客户端。
-
Consumer Group:每个 Consumer 属于一个特定的 Consumer Group(可为每个 Consumer 指定 group name,若不指定 group name 则属于默认的 group)。
-
Offset: 消息在partition中的偏移量。每一条消息在partition都有唯一的偏移量,消息者可以指定偏移量来指定要消费的消息。
特性
可扩展性、数据分区、低延迟、处理大量不同消费者
容错
kafka集群,每一个服务器为broker,每一个broker会有多个partition(创建topic后),假如有三个broker,然后一个topic设置了三个分区,那么每一个broker都会拥有一个分区,然后分区中会产生一个leader,在使用
过程中有消息进来(producer发送数据),leader则会拿到数据,然后会分发(复制)给其他两个随从,最终会保持每一个分区都会存在该消息(类似ES的集群,也许大部分的集群都是这样设计的)
消息偏移量
The Kafka cluster durably persists all published records—whether or not they have been consumed—using a configurable retention period. For example, i