【云计算】Kafka架构与分布式使用实际流程介绍
小标 2019-01-23 来源 : 阅读 1295 评论 0

摘要:本文主要向大家介绍了【云计算】Kafka架构与分布式使用实际流程介绍,通过具体的内容向大家展现,希望对大家学习云计算有所帮助。

本文主要向大家介绍了【云计算】Kafka架构与分布式使用实际流程介绍,通过具体的内容向大家展现,希望对大家学习云计算有所帮助。

名词解释


Broker

Kafka集群包含一个或多个服务器,这种服务器被称为broker。


Topic

每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)。


Partition

Parition是物理上的概念,每个Topic包含一个或多个Partition。


Producer

负责发布消息到Kafka broker


Consumer

消息消费者,向Kafka broker读取消息的客户端。


Consumer Group

每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。


物理拓扑图


  如上图所示,一个典型的Kafka集群中包含若干Producer(可以是web前端产生的Page View,或者是服务器日志,系统CPU、Memory等),若干broker(Kafka支持水平扩展,一般broker数量越多,集群吞吐率越高),若干Consumer Group,以及一个Zookeeper集群。Kafka通过Zookeeper管理集群配置,选举leader,以及在Consumer Group发生变化时进行rebalance。Producer使用push模式将消息发布到broker,Consumer使用pull模式从broker订阅并消费消息。


分布式Kafka搭建


ZooKeeper


Kafka通过ZooKeeper管理。每个Kafka server都有一个broker id,在配置文件server.properties中配置:


# The id of the broker. This must be set to a unique integer for each broker.
broker.id=0


启动Kafka后,在ZooKeeper上创建节点位于:/brokers/ids。查看某个broker得到如下结果:



[zk: localhost:2181(CONNECTED) 7] get /brokers/ids/0
{"listener_security_protocol_map":{"PLAINTEXT":"PLAINTEXT"},"endpoints":["PLAINTEXT://orisonchan:9092"],"jmx_port":-1,"host":"orisonchan","timestamp":"1517127677270","port":9092,"version":4}


其中,endpoint可在server.properties配置:



# The address the socket server listens on. It will get the value returned from java.net.InetAddress.getCanonicalHostName() if not configured.
# FORMAT:
# listeners = listener_name://host_name:port
# EXAMPLE:
# listeners = PLAINTEXT://your.host.name:9092
# listeners=PLAINTEXT://:9092
# Hostname and port the broker will advertise to producers and consumers. If not set,
# it uses the value for "listeners" if configured. Otherwise, it will use the value
# returned from java.net.InetAddress.getCanonicalHostName().
# advertised.listeners=PLAINTEXT://your.host.name:9092


可以看到,默认监听producer端口和广播给consumer端口都是9092。


Topic&Partition


  Topic在逻辑上可以被认为是一个queue,每条消费都必须指定它的Topic,可以简单理解为必须指明把这条消息放进哪个queue里。为了使得Kafka的吞吐率可以线性提高,物理上把Topic分成一个或多个Partition,每个Partition在物理上对应一个文件夹,该文件夹下存储这个Partition的所有消息和索引文件。


命令行创建topic



bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 3 --topic test


–zookeeper:指定ZooKeeper地址。


–topic:topic名。


–partitions:分区数。



 

如果没有指定分区数,则以shell所在的机器的server.properties的num.partitions参数为准。



–replication-factor:副本份数。



 

如果有3个partition,3个副本份数,则总共会有9份文件夹。



KafkaTemplate创建topic


  KafkaTemplate是Java API,一般在Spring中或者Spring的某些产品如Spring Data或SpringBoot使用。


  在KafkaTemplate中没有创建topic的API,只要使用send方法发送至Kafka,Kafka发现并没有对应的topic,就会使用默认的num.partitions来创建topic。


          

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标大数据云计算大数据安全频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved