陈奇网络工作室

Zookeeper和Kafka的基础概念和原理

系统运输

1、zookeeper概念介绍

在介绍ZooKeeper之前,让我先介绍一下分布式协作技术。 分布式协同技术主要用于解决分布式环境中多个进程之间的同步控制,使其有序访问某些共享资源,避免资源冲突(脑分裂)的后果。

这里首先说明什么是分布式系统。 分布式系统是指分布在不同地区的多台服务器、共同构成的一个APP应用系统为用户提供服务。 分布式系统中最重要的是进程的调度。 假设您有一个由分布在三个地区的服务器组成的APP部署系统,在第一台计算机上装载一个资源,分布在三个地区的APP进程将竞争该资源,但希望多个进程同时访问在这种情况下,需要进行协调。该协调者是分布式系统中常说的“锁”。 例如,“进程1”在使用此资源时首先获取此锁。 进程1在获得锁定后独占资源。 此时,其他进程无法访问此资源。 当“进程1”资源用完时,解除锁定,以允许其他进程获取锁定。 因此,这种“锁定”机制可以确保分布式系统中的多个进程有序访问此共享资源。 此处,该分布式环境中的该“锁定”被称为分布式锁定。 该分布式锁定是分布式协同技术实现的核心内容。

目前,分布式协调技术方面的优势包括谷歌的Chubby和Apache的ZooKeeper,它们都是分布式锁定的实现者。 ZooKeeper提供的锁服务在分布式领域已经进行了长期的尝试,其可靠性、可用性通过理论和实践得到了验证。

ZooKeeper是一种高可用性、高性能的开源协调服务,专为分布式APP应用而设计,在提供分布式锁定服务的同时,提供集成命名服务、状态同步服务、集群管理、分布式消息队列、分布式APP应用程序配置

2、zookeeper应用实例

1 )什么是单点故障问题?

单点故障是指在主从分布式系统中,主节点负责任务的调度分发,从节点负责任务的处理,当主节点发生故障时整个APP应用系统瘫痪,这种故障称为单点故障其解决方案是通过选择集群主角色来解决分布式系统的单点故障问题。

2 )传统方式是如何解决单点故障的? 还有什么缺点?

传统方式采用备用节点定期向主节点发送ping数据包,主节点收到ping数据包后,向备用节点发送回复Ack信息,当备用节点收到回复时,当前主节点正常如果主节点出现故障,备用节点将无法接收回复消息。 在这种情况下,备用节点认为主节点已关闭,并继续代表新的主节点提供服务。

这种传统的解决单点故障的方法在一定程度上解决了问题,但存在网络问题的担忧。 如果在主节点没有故障的情况下发送回ack应答时网络发生故障,备用节点无法接收到应答,则认为主节点发生了故障,然后备用节点发送主节点的服务在这种情况下,分布式系统中会出现两个主节点(双主节点),出现双主节点会导致分布式系统服务混乱。 这样的话,整个分布式系统就不能使用了。 为了防止这种情况,需要引入ZooKeeper来解决这个问题。

3 ) zookeeper的结构是什么?

在以下三种情况下进行说明。

(1)主机启动

在分布式系统上部署Zookeeper可以配置多个主节点。 本节提供了配置两个主节点的示例。 假设它们是主节点a和主节点b,当两个主节点引导时,它们将在Zookeeper中注册节点信息。 设主节点a登录的节点信息为master00001,主节点b登录的节点信息为master00002,登录后进行选举。 虽然有各种各样的算法用于选举,但是,这里如果以最小号码作为选举算法,则最小号码的节点赢了选举并被锁定在主节点上,主节点a被锁定在主节点上,主节点b被阻塞在备用节点上。 这样,Zookeeper完成了两个主进程的调度。 完成了主节点、备用节点的分配和合作。

)2)主机故障

如果? 当主节点a发生故障时,ZooKeeper中注册的节点信息会自动删除,ZooKeeper会自动感知节点的变化并发现主节点a吗? 故障后,将再次举行选举,此时? 主节点b? 在选举中获胜,代替吗? 主节点a? 成为新的主节点,至此,主节点、被节点的重新选举完成。

)3)恢复大师

主节点恢复后,再次在ZooKeeper中注册自己的节点信息。 但是,此时登录的节点信息为master00003,而不是原始信息。 ZooKeeper感知到节点的变化,重新开始选举。 此时,主节点b会在选举中再次获胜并继续担任吗? 主节点、主节点a负责备用节点。

zookeeper通过这样的协调、调度机构,这样反复进行集群的管理和状态同步。

? 4 ) zookeeper集群架构

zookeeper一般在集群体系结构中提供服务。 下图是zookeeper的基本体系结构图。

zookeeper簇的主要作用是服务器和客户端,其中服务器分为leader、follower、observer三大绝,各作用含义如下。

Leader :主要负责投票开始和决议以及系统状态更新的领导作用。

follower :根据角色接收客户端请求并将结果返回给客户端,用于在选举期间参与投票。

观察器:观察者的作用。 用户接收来自客户端的请求,将写入请求转发给leader,同时同步leader的状态,但不参与投票。 观察器的目的是扩展系统,提高可扩展性。

客户端:向zookeeper发送请求的客户端角色。

Zookeeper群集中的每个Server都有内存存储数据,当Zookeeper启动时,它会从实例中选择一个服务器作为leader,leader负责更新数据等操作。 只有大多数服务器都成功将数据更改到内存中时,才会认为数据更改成功。

Zookeeper是客户端Client首先与一个服务器或Observe进行通信,开始写入请求,然后服务器将写入请求转发给Leader,Leader将写入请求转发给其他服务器,其他服务器收到写入请求

3、Kafka基础与入门

1 ) kafka的基本概念

Kafka是一种高吞吐量的分布式发布/订阅消息系统,它是官方对Kafka的定义。 话说回来,大家可能不太理解,举个简单的例子,现在是大数据时代,各种各样的商业、社交、搜索、浏览都会产生大量的数据。 那么如何快速地收集这些数据,如何进行实时分析,是一个必须解决的问题,同时,生产者生产( produce )各种数据,消费者( consume )消费(分析、处理)这些数据那么,面对这些需求,如何有效稳定地完成数据的生产和消耗呢? 这就需要在生产者和消费者之间架起信息系统——通信的桥梁。 从微观层面来说,这种业务需求也可以理解为如何在不同系统之间传递消息。

kafka是Apache的开源系统,可以实时处理海量数据,包括基于hadoop平台的数据分析、低延迟实时系统、storm/spark流媒体引擎等,满足各种需求kafka现在被许多大公司用作各种类型的数据管道和消息系统。

2 ) kafka角色术语

kafka的核心概念和作用

Broker:Kafka群集包含一个或多个服务,每个服务都称为broker。

topic :发布到Kafka集群的所有消息都有分类,此类别称为topic (主题)。

Producer :您是信息的生产者,负责向kafka发布信息吗? 博客。

Consumer :指消息的消费者,从kafka? broker提取数据,并消耗这些发布的消息。

Partition:Partition是一个物理概念,每个Topic包含一个或多个Partition,每个Partition都是一个有序队列。 partition中的每条消息都被分配一个offset(orderid )。

Consumer? 组:消费者组。 您可以为每个使用者组指定一个使用者组。 如果不指定使用者组,则属于默认组。

Message :消息、通信的基本单位,每个producer可以在一个topic上发布几条消息。

? 3 ) kafka拓扑结构

典型的Kafka集群包括几个Producer、几个broker、几个Consumer Group和一个Zookeeper集群。 Kafka通过Zookeeper管理集群结构,选出leader,在Consumer Group发生变化时进行rebalance。 Producer使用推送模式将消息发布到broker,而Consumer使用推送模式从broker订阅和消费消息。 典型的体系结构如下图所示。

从图中可以看出,典型的消息系统由生产者( Producer )、存储系统( broker )、消费者)构成,Kafka作为分布式消息系统支持多个生产者和多个消费者。 生产者可以将消息分布在集群中不同节点的不同Partition上,消费者在写可以消耗集群中多个节点的多个Partition的消息时,可以允许多个生产者写入同一个Partition 一个Partition只被一个消费群体中的一个消费者消费,一个消费者可以消费多个Partition。 也就是说,在同一个消费群体下消费者对Partition是排他性的,不同的消费群体之间是共享的

kafka支持消息持久化存储。 持久化数据存储在kafka的日志文件中,生产者生产邮件后,kafka首先将邮件存储在broker中,而不是直接传递给消费者。 为了减少写入磁盘的次数,broker不仅临时缓存消息,在消息的数量、大小和大小达到一定阈值时批量写入磁盘,还改进了kafka

kafka中的每条消息都将写入partition并依次写入磁盘。 这很重要。 这是因为在机器磁盘上随机写入效率很低,但在顺序写入中效率非常高。 该顺序写入机制是kafka吞吐率的重要保证之一。

4 ) Topic和partition

Kafka的topic存储为partition,每个topic可以设置其partition的数量。 分区的数量决定了构成topic的log的数量。 建议的分区数必须大于同时运行的consumer数。 此外,partition的数量应小于或等于群集broker的数量,以便消息数据可以均匀分布在每个broker上

那么,Topic为什么要设定多个Partition呢? 这是因为kafka基于文件存储。 通过配置多个分区,可以将消息内容分散存储在多个broker中,从而避免文件大小达到独立磁盘的上限。 另外,通过将一个topic划分为任意多个partitions,可以保证消息存储、消息消费的效率。 partitions越多,可以容纳越多的consumer,从而有效地提高Kafka的吞吐率。 因此,将Topic分割为多个partitions的优点是,可以将大量的消息分割为多个数据并同时写入不同的节点,使各集群节点分担写入请求并进行负载。

? 在存储结构中,每个partition在物理上对应一个文件夹,其下包含partition的所有消息和索引文件。 partiton命名约定是topic名称的连号,第一个partiton的连号从0开始,最大连号为partitions数减去1。

每个partition (文件夹中有多个大小相同的segment )数据文件,每个segment的大小相同,但每个消息的大小可能不同,因此segmentbr/数据文件中的消息数不一定相同segment数据文件有两个部分:索引文件和数据文件。 这两个文件是一对一的,成对显示,后缀"index "和"log "分别表示为segment索引文件和数据文件。

5 ) Producer生产机制

Producer是消息和数据的生产者,在向broker发送消息时,它根据Paritition机制选择要存储在哪个Partition中。 如果正确配置了分区机制,则所有消息都将均匀分布在不同的分区上,从而实现数据负载平衡。 如果一个Topic对应一个文件,则该文件所在的计算机上的I/O将成为此Topic的性能瓶颈,但如果有Partition,则可以将不同的消息同时发送到不同broker上的不同Partition

6 )消费者消费机制

Kafka发布消息通常有两种模式:队列模式( queuing )和发布/订阅模式( publish-subscribe )。 在排队模式下,只有一个消费组,这个消费组有多个消费者,一条消息只能由这个消费组中的一个消费者消费。在发布/订阅模型中,有多个消费组,每个消费组只有一个消费者

Kafka的Producer和consumer采用推、拉模式。 也就是说,Producer呢? broker进行推送消息,comsumer从bork进行推送消息,推送和推送对于消息的生产和消费是异步进行的。 pull模式的一个优点是consumer可以自主控制消费消息的速度。 consumer还可以自行控制是从broker中批量提取数据还是逐条消耗数据。

详情请访问云服务器、域名注册、虚拟主机的问题,请访问西部数码代理商官方网站: www.chenqinet.cn

相关推荐

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3