Kafka官网翻译中文版Word文件下载.docx

上传人:b****5 文档编号:16284010 上传时间:2022-11-22 格式:DOCX 页数:9 大小:144.37KB
下载 相关 举报
Kafka官网翻译中文版Word文件下载.docx_第1页
第1页 / 共9页
Kafka官网翻译中文版Word文件下载.docx_第2页
第2页 / 共9页
Kafka官网翻译中文版Word文件下载.docx_第3页
第3页 / 共9页
Kafka官网翻译中文版Word文件下载.docx_第4页
第4页 / 共9页
Kafka官网翻译中文版Word文件下载.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

Kafka官网翻译中文版Word文件下载.docx

《Kafka官网翻译中文版Word文件下载.docx》由会员分享,可在线阅读,更多相关《Kafka官网翻译中文版Word文件下载.docx(9页珍藏版)》请在冰豆网上搜索。

Kafka官网翻译中文版Word文件下载.docx

高并发:

支持数千个客户端同时读写

1.3Kafka一些重要设计思想

下面介绍先大体介绍一下Kafka的主要设计思想,可以让相关人员在短时间内了解到kafka相关特性,如果想深入研究,后面会对其中每一个特性都做详细介绍。

Consumergroup:

各个consumer可以组成一个组,每个消息只能被组中的一个consumer消费,如果一个消息可以被多个consumer消费的话,那么这些consumer必须在不同的组。

消息状态:

在Kafka中,消息的状态被保存在consumer中,broker不会关心哪个消息被消费了被谁消费了,只记录一个offset值(指向partition中下一个要被消费的消息位置),这就意味着如果consumer处理不好的话,broker上的一个消息可能会被消费多次。

消息持久化:

Kafka中会把消息持久化到本地文件系统中,并且保持极高的效率。

消息有效期:

Kafka会长久保留其中的消息,以便consumer可以多次消费,当然其中很多细节是可配置的。

批量发送:

Kafka支持以消息集合为单位进行批量发送,以提高push效率。

push-and-pull 

:

Kafka中的Producer和consumer采用的是push-and-pull模式,即Producer只管向brokerpush消息,consumer只管从brokerpull消息,两者对消息的生产和消费是异步的。

Kafka集群中broker之间的关系:

不是主从关系,各个broker在集群中地位一样,我们可以随意的增加或删除任何一个broker节点。

负载均衡方面:

Kafka提供了一个metadataAPI来管理broker之间的负载(对Kafka0.8.x而言,对于0.7.x主要靠zookeeper来实现负载均衡)。

同步异步:

Producer采用异步push方式,极大提高Kafka系统的吞吐率(可以通过参数控制是采用同步还是异步方式)。

分区机制partition:

Kafka的broker端支持消息分区,Producer可以决定把消息发到哪个分区,在一个分区中消息的顺序就是Producer发送消息的顺序,一个主题中可以有多个分区,具体分区的数量是可配置的。

离线数据装载:

Kafka由于对可拓展的数据持久化的支持,它也非常适合向Hadoop或者数据仓库中进行数据装载。

插件支持:

现在不少活跃的社区已经开发出不少插件来拓展Kafka的功能,如用来配合Storm、Hadoop、flume相关的插件。

1.4TopicsandLogs

先来看一下Kafka提供的一个抽象概念:

topic。

一个topic是对一组消息的归纳。

对每个topic,Kafka对它的日志进行了分区,如下图所示:

每个分区都由一系列有序的、不可变的消息组成,这些消息被连续的追加到分区中。

分区中的每个消息都有一个连续的序列号叫做offset,用来在分区中唯一的标识这个消息。

在一个可配置的时间段内,Kafka集群保留所有发布的消息,不管这些消息有没有被消费。

比如,如果消息的保存策略被设置为2天,那么在一个消息被发布的两天时间内,它都是可以被消费的。

之后它将被丢弃以释放空间。

Kafka的性能是和数据量无关的常量级的,所以保留太多的数据并不是问题。

实际上每个consumer唯一需要维护的数据是消息在日志中的位置,也就是offset.这个offset有consumer来维护:

一般情况下随着consumer不断的读取消息,这offset的值不断增加,但其实consumer可以以任意的顺序读取消息,比如它可以将offset设置成为一个旧的值来重读之前的消息。

以上特点的结合,使Kafkaconsumers非常的轻量级:

它们可以在不对集群和其他consumer造成影响的情况下读取消息。

你可以使用命令行来"

tail"

消息而不会对其他正在消费消息的consumer造成影响。

将日志分区可以达到以下目的:

首先这使得每个日志的数量不会太大,可以在单个服务器器上保存。

另外每个分区可以单独发布和消费,为并发操作topic提供了一种可能。

1.5Distribution

每个分区在Kafka集群的若干服务器中都有副本,这样这些持有副本的服务器可以共同处理数据和请求,副本数量是可以配置的。

副本使Kafka具备了容错能力。

每个分区都由一个服务器作为“leader”,零或若干服务器作为“followers”,leader负责处理消息的读和写,followers则去复制leader.如果leaderdown了,followers中的一台则会自动成为leader。

集群中的每个服务器都会同时扮演两个角色:

作为它所持有的一部分分区的leader,同时作为其他分区的followers,这样集群就会具有较好的负载均衡。

1.6Producers

Producer将消息发布到它指定的topic中,并负责决定发布到哪个分区。

通常简单的由负载均衡机制随机选择分区,但也可以通过特定的分区函数选择分区。

使用的更多的是第二种。

1.7Consumers

发布消息通常有两个模型:

队列模式和发布-订阅模式。

在队列模式中,消费者从同一个服务器读取,每个消息被其中的一个消费者读到,

在发布-订阅模式中,消息被广播给所有的消费者。

Kafka提供了一个概念---消费者组,概括了以上两种模式。

每一个消费者都属于某一个消费者组,topic中的消息被发布到每个组中的某一个消费者。

消费者可以在不同的进程中,也可以在不同的机器上。

如果所有的消费者都在一个组中,这就成为了传统的队列模式,在各消费者中实现负载均衡。

如果所有的消费者都不在不同的组中,这就成为了发布-订阅模式,所有的消息都被分发到所有的消费者中。

AtwoserverKafkaclusterhostingfourpartitions(P0-P3)withtwoconsumergroups.ConsumergroupAhastwoconsumerinstancesandgroupBhasfour.

相比传统的消息系统,Kafka可以很好的保证有序性。

传统的队列在服务器上保存有序的消息,如果多个consumers同时从这个服务器消费消息,服务器就会以消息存储的顺序向consumer分发消息。

虽然服务器按顺序发布消息,但是消息是被异步的分发到各consumer上,所以当消息到达时可能已经失去了原来的顺序,这意味着并发消费将导致顺序错乱。

为了避免故障,这样的消息系统通常使用“专用consumer”的概念,其实就是只允许一个消费者消费消息,当然这就意味着失去了并发性。

在这方面Kafka做的更好,通过分区的概念,Kafka可以在多个consumer组并发的情况下提供较好的有序性和负载均衡。

将每个分区分只分发给一个consumer组,这样一个分区就只被这个组的一个consumer消费,就可以顺序的消费这个分区的消息。

因为有多个分区,依然可以在多个consumer组之间进行负载均衡。

注意consumer组的数量不能多于分区的数量,也就是有多少分区就允许多少并发消费。

Kafka只能保证一个分区之内消息的有序性,在不同的分区之间是不可以的,这已经可以满足大部分应用的需求。

如果需要topic中所有消息的有序性,那就只能让这个topic只有一个分区,当然也就只有一个consumer组消费它。

1.8Guarantees

Kafka做出下面的保证:

●消息按照发送的顺序被append到指定的topic的指定分区。

●消费者按消息的存储顺序被读取到。

●对于一个N副本的topic,能容忍N-1个服务器宕机,保证消息提交到log。

2使用场景

2.1消息系统

与其他传统的消息系统( 

ActiveMQ 

、 

RabbitMQ等)相比,Kafka有高吞吐量,内置可分区,高容错,可重复的优势,这使其适用于消息产出量大的应用。

对于一些常规的消息系统,kafka是个不错的选择;

partitons/replication和容错,可以使kafka具有良好的扩展性和性能优势.不过到目前为止,我们应该很清楚认识到,kafka并没有提供JMS中的"

事务性"

"

消息传输担保(消息确认机制)"

消息分组"

等企业级特性;

kafka只能使用作为"

常规"

的消息系统,在一定程度上,尚未确保消息的发送与接收绝对可靠(比如,消息重发,消息发送丢失等)。

注:

红色内容摘自网络。

2.2WebsiteActivityTracking

TheoriginalusecaseforKafkawastobeabletorebuildauseractivitytrackingpipelineasasetofreal-timepublish-subscribefeeds.Thismeanssiteactivity(pageviews,searches,orotheractionsusersmaytake)ispublishedtocentraltopicswithonetopicperactivitytype.Thesefeedsareavailableforsubscriptionforarangeofusecasesincludingreal-timeprocessing,real-timemonitoring,andloadingintoHadooporofflinedatawarehousingsystemsforofflineprocessingandreporting.

Activitytrackingisoftenveryhighvolumeasmanyactivitymessagesaregeneratedforeachuserpageview.

2.3Metrics

Kafkaisoftenusedforoperationalmonitoringdata.Thisinvolvesaggregatingstatisticsfromdistributedapplicationstoproducecentralizedfeedsofoperationaldata.

2.4LogAggregation

ManypeopleuseKafkaasareplacementforalogaggregationsolution.Logaggregationtypicallycollectsphysicallogfilesoffserversandputstheminacentralplace(afileserverorHDFSperhaps)forprocessing.Kafkaabstractsawaythedetailsoffilesandgivesacleanerabstractionoflogoreventdataasastreamofmessages.Thisallowsforlower-latencyprocessingandeasiersupportformultipledatasourcesanddistributeddataconsumption.Incomparisontolog-centricsystemslikeScribeorFlume,Kafkaoffersequallygoodperformance,strongerdurabilityguaranteesduetoreplication,andmuchlowerend-to-endlatency.

2.5StreamProcessing

Manyusersendupdoingstage-wiseprocessingofdatawheredataisconsumedfromtopicsofrawdataandthenaggregated,enriched,orotherwisetransformedintonewKafkatopicsforfurtherconsumption.ForexampleaprocessingflowforarticlerecommendationmightcrawlarticlecontentfromRSSfeedsandpublishittoan"

articles"

topic;

furtherprocessingmighthelpnormalizeordeduplicatethiscontenttoatopicofcleanedarticlecontent;

afinalstagemightattempttomatchthiscontenttousers.Thiscreatesagraphofreal-timedataflowoutoftheindividualtopics. 

Storm 

and 

Samza 

arepopularframeworksforimplementingthesekindsoftransformations.

2.6EventSourcing

Eventsourcing 

isastyleofapplicationdesignwherestatechangesareloggedasatime-orderedsequenceofrecords.Kafka'

ssupportforverylargestoredlogdatamakesitanexcellentbackendforanapplicationbuiltinthisstyle.

2.7CommitLog

Kafkacanserveasakindofexternalcommit-logforadistributedsystem.Theloghelpsreplicatedatabetweennodesandactsasare-syncingmechanismforfailednodestorestoretheirdata.The 

logcompaction 

featureinKafkahelpssupportthisusage.InthisusageKafkaissimilarto 

ApacheBookKeeper 

project.

3集群搭建

3.1Step1:

Downloadthecode

Download 

the0.8.2.0releaseandun-tarit.

>

tar-xzfkafka_2.10-0.8.2.0.tgz

cdkafka_2.10-0.8.2.0

3.2Step2:

Starttheserver

KafkausesZooKeepersoyouneedtofirststartaZooKeeperserverifyoudon'

talreadyhaveone.Youcanusetheconveniencescriptpackagedwithkafkatogetaquick-and-dirtysingle-nodeZooKeeperinstance.

bin/zookeeper-server-start.shconfig/zookeeper.properties

[2013-04-2215:

01:

37,495]INFOReadingconfigurationfrom:

config/zookeeper.properties(org.apache.zookeeper.server.quorum.QuorumPeerConfig)

...

NowstarttheKafkaserver:

bin/kafka-server-start.shconfig/server.properties

47,028]INFOVerifyingproperties(kafka.utils.VerifiableProperties)

47,051]INFOPropertysocket.send.buffer.bytesisoverriddento1048576(kafka.utils.VerifiableProperties)

3.3Step3:

Createatopic

Let'

screateatopicnamed"

test"

withasinglepartitionandonlyonereplica:

bin/kafka-topics.sh--create--zookeeperlocalhost:

2181--replication-factor1--partitions1--topictest

Wecannowseethattopicifwerunthelisttopiccommand:

bin/kafka-topics.sh--list--zookeeperlocalhost:

2181

test

Alternatively,insteadofmanuallycreatingtopicsyoucanalsoconfigureyourbrokerstoauto-createtopicswhenanon-existenttopicispublishedto.

3.4Step4:

Sendsomemessages

Kafka使用一个简单的命令行producer,从文件中或者从标准输入中读取消息并发送到服务端。

默认的每行命令将发送一条消息。

运行producer并在控制台中输一些消息,这些消息将被发送到服务端:

bin/kafka-console-producer.sh--broker-listlocalhost:

9092--topictest

Thisisamessage

Thisisanothermessage

3.5Step5:

Startaconsumer

Kafka也有一个命令行consumer可以读取消息并输出到标准输出:

bin/kafka-console-consumer.sh--zookeeperlocalhost:

2181--topictest--from-beginning

你在一个终端中运行consumer命令行,另一个终端中运行producer命令行,就可以在一个终端输入消息,另一个终端读取消息。

这两个命令都有自己的可选参数,可以在运行的时候不加任何参数可以看到帮助信息。

3.6Step6:

搭建一个多个broker的集群

刚才只是启动了单个broker,现在启动有3个broker组成的集群,这些broker节点也都是在本机上的:

首先为每个节点编写配置文件:

cpconfig/server.propertiesconfig/server-1.properties

cpconfig/server.propertiesconfig/server-2.properties

在拷贝出的新文件中添加以下参数:

config/server-1.properties:

broker.id=1

port=9093

log.dir=/tmp/kafka-logs-1

config/server-2.properties:

broker.id=2

port=9094

log.dir=/tmp/kafka-logs-2

broker.id在集群中唯一的标注一个节点,因为在同一个机器上,所以必须制定不同的端口和日志文件,避免数据被覆盖。

刚才已经启动了Zookeeper和一个节点,现在启动另外两个节点:

bin/kafka-server-start.shconfig/server-1.properties&

bin/kafka-server-start.shconfig/server-2.properties&

创建一个拥有3个副本的topic:

2181--replication-factor3--partitions1--topicmy-replicated-topic

现在我们搭建了一个集群,怎么知道每个节点的信息呢?

运行“"

describetopics”命令就可以了:

下面解释一下这些输出。

第一行是对所有分区的一个描述,然后每个分区都会对应一行,因为我们只有一个分区所以下面就只加了一行。

∙leader:

负责处理消息的读和写,leader是从所有节点中随机选择的.

∙replicas:

列出了所有的副本节点,不管节点是否在服务中.

∙isr:

是正在服务中的节点.

在我们的例子中,节点1是作为leader运行。

向topic发送消息:

4配置

4.1生产者配置

必要配置:

1.metadata.broker.list

2.request.required.acks

3.producer.type

4.serializer.class

5其他参考资料

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1