Kafka官方文档翻译(2016-11-16)

来源:互联网 发布:dhtmlhistory.js下载 编辑:程序博客网 时间:2024/04/26 03:33

看了很多翻译文档,可能是版本的问题吧,感觉驴唇不对马嘴的。。。索性自己整理下,供大家学习吧!完全尊重原文档的翻译,一句一句可以对照的,若有纰漏,烦请指出。原英文文档链接:http://kafka.apache.org/intro.html


介绍

Kafka™是一个分布式流平台( distributed streaming platform)。但它实际是什么意思呢?

我们认为流平台具有三个关键功能:

1.它允许您发布和订阅记录流。 在这方面,它类似于消息队列或企业消息系统。

2.它允许您以容错方式存储记录流。

3.它允许您在记录发生时处理流记录。


什么是Kafka的优势?

它用于两大类应用程序:

1.构建可靠地在系统或应用程序之间获取数据的实时的流数据通道

2.构建变换或响应数据流的实时流应用程序

要了解Kafka如何做这些事情,让我们从下而上地探索和探索Kafka的能力。


首先几个概念:

·Kafka作为一个群集在一个或多个服务器上运行。

·Kafka集群存储的记录流叫做主题(topic)。

·每个记录由一个键,一个值和一个时间戳组成。


Kafka有四个核心API:

·生产者API允许应用程序将流记录发布到一个或多个Kafka 主题(topic)。

·Consumer API允许应用程序订阅一个或多个主题(topic),并处理为其生成的记录流。

·Streams API允许应用程序充当流处理器(processor),消耗来自一个或多个主题(topic)的输入流并产生到一个或多个输出主题的输出流,有效地将输入流转换为输出流。

·Connector API允许构建和运行可重用的生产者或消费者,将Kafka主题(topic)连接到现有应用程序或数据系统。 例如,关系数据库的连接器可能捕获对表的每个更改。


在Kafka中,客户端和服务器之间的通信使用简单的高性能语言无关的TCP协议来完成。 此协议版本化,并保持与旧版本的向后兼容性。 我们为Kafka提供Java客户端,但客户端提供多种语言。


主题(topic)和日志

让我们首先深入Kafka提供的记录流的核心抽象 - 主题(topic)。


主题(topic)是发布记录的类别或Feed名称。 主题在Kafka总是多用户; 也就是说,主题可以有零个,一个或多个订阅其的数据的消费者(consumer)。

对于每个主题,Kafka集群维护一个分区日志,如下所示:


事实上,每个消费者保留的唯一元数据是消费者在日志中的偏移或位置。这种偏移(offset)由消费者控制:通常消费者在读取记录时线性地提前其偏移,但是实际上,由于位置由消费者控制,所以它可以按照喜欢的任何顺序来消费记录。例如,消费者可以重置到较旧的偏移以重新处理来自过去的数据或者跳到最近的记录并开始从“现在”消费。

这些功能的组合意味着Kafka消费者非常灵活 - 他们可以来来去去,对群集或其他消费者没有太大的影响。例如,您可以使用我们的命令行工具“拖动”任何主题的内容,而不更改现有消费者使用的内容。

日志中的分区有几个目的。 首先,它们允许日志扩展到适合单个服务器的大小。每个单独的分区必须适合管理它的服务器,一个主题可能有许多分区,因此它可以处理任意数量的数据。第二,它们作为并行性的单位。

分布式

日志的分区分布在Kafka集群中的服务器上,每个服务器处理数据并共享分区。每个分区都复制信息到已配置数量的服务器上进行备份,以实现容错。
每个分区都有一个服务器作为“领导者”,零个或多个服务器作为“跟随者”。领导者处理分区的所有读取和写入请求,而跟随者被动地复制领导者的信息。如果领导失败,其中一个追随者将自动成为新的领导者。 每个服务器都作为其一些分区的领导者和其他分区的追随者,所以负载在集群内是平衡的。(我理解在不同分区一个服务器他又是领导者,也是跟随者,比如在A分区,是领导者,B分区就是跟随者了)

生产者

生产者将数据发布到他们选择的主题并负责选择哪个记录分配给主题内的哪个分区。这可以以循环方式完成并简单地平衡负载,或者它也可以根据一些语义分区函数(例如基于记录中的一些密钥)来完成。

消费者

消费者使用消费者组名称标记自己,并且发布到主题的每个记录都会被在这个订阅了的消费者组里的每一个实例中传递。消费者实例可以分布在多个进程中或多台机器上。如果所有消费者实例具有相同的消费者组,则记录将有效地在消费者实例上进行负载平衡。
如果所有消费者实例具有不同的消费者组,则每个记录将被广播到所有消费者进程。

两个服务器Kafka集群托管四个分区(P0-P3)与两个消费者组。 消费者组A有两个消费者实例,组B有四个。
然而,更常见的是,我们发现主题具有少量的消费者组,每个“逻辑用户”一个消费者组。为了实现可扩展性和容错,每个组由许多消费者实例组成。这只是发布 - 订阅语义,其中订阅者是消费者的集群而不是单个进程。
未完待续。。。
0 0
原创粉丝点击