赞
踩
Kafka 是一个分布式消息流处理平台,原本开发自 LinkedIn,用作 LinkedIn 的活动流(Activity Stream)和运营数据处理管道(Pipeline)的基础。现在它已被多家公司作为多种类型的数据管道和消息系统使用1 2。
作为一个消息处理平台,kafka主要有以下功能2:
kafka的功能示意图如图所示。
topics是一个分类,或者叫数据供给中心(feed),发布者生产数据到topics,消费者从topics消费数据。kafka的topics总是有多个消费者,即0个,1个,或多个。
kafka的功能示意图如图所示。
一个topic有多个分片(partition),每个分片是一个有序的数据序列,而且分片是持续增长的。分片中的每一条记录(record)有一个序号(offset),用来唯一标识该记录在分片中的位置。
Kafka集群使用一个可配置的时间周期来保存所有发布的记录,无论它们是否已经被消费。举个例子,如果保留策略设置的是两天,在数据记录发布后的两天内,它是可以被消费的,但两天后,它就会被丢弃以释放空间。
生产者自己选择发布数据到相应的topics。生产者发布数据到Kafka集群的服务器(broker),一般来说,Kafka集群有多个broker,用来做负载均衡3。生产者发布数据也可以采取简单的循环方式进行负载均衡,也可以依据一定的分区策略(比如基于record中的key)。
由于broker本身是无状态的,所以需要Zookeeper来维护服务器的状态。Apache ZooKeeper是Apache软件基金会的一个软件项目,他为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册(naming)4。Kafka提供默认、简单的Zookeeper配置文件用于启动一个本地的Zookeeper实例5。Zookeeper通知生产者和消费者Kafka集群中新的服务器(broker)的出现或者某个服务器的失败。
在Kafka里把消费者按标签分成消费者组(consumer group),每一条发布到topic的记录被发送到一个消费者实例。消费者实例可以在不同的进程或不同的机器上。如果所有的消费者实例都在相同的组中,那么数据记录会以负载均衡的方式分配给消费者实例。如果消费者实例处在不同的组别中,每一个记录会被广播到所有的消费者组中的一个实例上2。如图所示。
下图展示了Kafka的整体架构。生产者发布消息到topic,每个topic又分成多个partition,每台服务器(broker)拥有0个或多个topic的partition。每个partition是一个有读写顺序的log文件,存储在硬盘上6。
相比于传统的 发布/订阅 系统,Kafka中的消费者可以看做是一组合作的进程。topic
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。