您的位置:首页 > 运维架构 > Apache

Apache Kafka笔记(一):基础架构

2017-01-23 18:32 148 查看
  文章是笔者在看完Getting Started with Apache Kafka(来自https://www.pluralsight.com/courses/apache-kafka-getting-started)的视频教程之后,记录的学习笔记和一些总结,笔记中有任何错误和偏颇欢迎指正。

笔记分为五部分,第一篇讲述关于Kafka的基础架构,第二篇讲述关于Topics,Partitions and Brokers这三个核心概念,第三篇讲述Producer的工作原理,第四篇讲述Consumer的工作原理,第五篇讲述Kafka的消息模式、分布式部署、性能优化、容错处理等细节。

Kafka简介

 Kafka是一种高吞吐量的分布式消息订阅发布系统,用于构建实时数据管道和流媒体应用,拥有易于水平扩展、容错率高、速度快、吞吐量大等优势,2012年在Apache软件基金会下开源。

架构角色组成



Producer

  负责生产和发送消息,具体Producer原理会在第三篇笔记中讲解。

Broker

  Kafka集群包含一个或多个服务器,这种服务器被称为broker。如上图中,KAFKA CLUSTER中的一个工程师代表一个broker,在每个集群里会从众多broker选举出一个Controller,如上图的标记为红色的工程师,职责在于:1.负责掌管每一个worker节点(非Controller的broker)的健康状态和可用性 2.负责任务的冗余(当数据要做多个备份,保证高可用性时,只有Controller在了解各个节点的状态情况下才能进行合理的分配任务)。当Controller需要将一个任务分给多个worker节点执行时,Controller会提拔出Leader,Leader的提拔根据数据要写多少个备份来决定,比如,当一份数据需要做三个备份时,就会从三个worker节点中提拔出一个Leader,Leader负责所有的读写操作,而Followers(非Leader的brokers)则只是复制Leader的日志(commit log),所以Leader应该是相比Followers性能更好的节点。当一个Leader宕掉时,Controller会把分配给它的任务重新分配给其他Leader,并且重新选举Leader。

Consumer

  消息消费者,通常以Consumer Group的形式出现,多个Consumer组成一个小组,共同消费消息从而提高效率,具体Consumer原理会在第四篇笔记中讲解。

ZooKeeper

  大多数的分布式服务都用ZooKeeper来管理集群信息,和别的分布式服务类似,在Kafka中,ZooKeeper提供并维护集群中所有分布的节点的元数据(metadata),其中包含集群的配置信息、健康状态、组(Group)的成员关系,保证数据一致性、可靠性和服务的可扩展性。

核心概念



Topic

  Topic是将消息进行分类的容器,创建一个Topic,而后,Producer才可以向这个Topic中写入消息,Consumer才可以从这个Topic中读取消息,Topic是一个逻辑上的概念。

Partition

  Partition是对Topic进行并行操作的最小单元,每个Topic可以分成一个或多个Partition,所以往往一个Topic的数据分成多个Partition,由多个broker维持。如上图,三个Partition组合起来才是完整Topic的数据,消息的写入按照时间进行排序,并且写入的消息是不可修改的,这也保证了每个Consumer读取Partition中的消息时不会对其他Consumer产生影响。

模拟一个完整的消息订阅发布的过程

启动Zookeeper

bin/zookeeper-server-start.sh config/zookeeper.properties

启动Kafka服务(broker)

bin/kafka-server-start.sh config/server.properties

创建一个Topic

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

–replication-factor 指定每条消息复制的个数

–partitions 指定每个Topic分成几片

创建一个Producer,向brokers发送一些消息

bin/kafka-console-producer.sh –broker-list localhost:9092 –topic test

在命令行中可以键入内容来发送到brokers

–borker-list指定具体发送到那些brokers

–topic 指定往哪个Topic中发送消息

启动一个Consumer,从brokers抓取消息

bin/kafka-console-consumer.sh –bootstrap-server localhost:9092 –topic test –from-beginning

命令行中会动态打印出最新抓取到的消息

–bootstrap-server指定抓取信息的brokers列表(一个或多个)

–topic指定订阅的消息Topic

  更为详细的命令可参考官网http://kafka.apache.org/quickstart,Kafka的Tutoral很友好。

今天关于Kafka基础架构的入门学习笔记就先到这里,下面一篇笔记将讲述关于Topics,Partitions和Brokers的概念。

  欢迎关注我的公众号呼砖\ (^o^)/~

                       Ful1sEmpty

                 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  apache kafka