zookeeper+kafka

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: zookeeper+kafka

一、zookeeper简介

1.1 zookeeper的概述

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源

的实现,是Hadoop和Hbase的重要组件。


它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式

同步、组服务等。


ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统

提供给用户。


1.2 Zookeeper的定义

Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目。


1.3 Zookeeper的工作机制

Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理

大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已

经在Zookeeper上注册的那些观察者做出相应的反应。


Zookeeper =文件系统+通知机制。


1.4 Zookeeper 的特点

(1) Zookeeper:一个领导者(Leader) ,多个跟随者(Follower) 组成的集群。

(2) Zookeepe集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。所以Zookeeper适合安装奇数台服务器。

(3)全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。

(4)更新请求顺序执行,来自同一个Client的更新请求按其发送顺序依次执行,即先进先出。

(5)数据更新原子性,一次数据更新要么成功,要么失败。

(6)实时性,在一定时间范围内,Client能读到最新数据。


二、Zookeeper的应用场景


提供的服务包括:统一命名服务、 统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等。


2.1 统一命名服务

在分布式环境下,经常需要对应用/服务进行统一命名, 便于识别。例如: IP不容易记住,而域名容易记住。


2.2 统一配置管理

分布式环境下,配置文件同步非常常见。一般要求一个集群中,所有节点的配置信息是一致的,比如Kafka集

群。对配置文件修改后,希望能够快速同步到各个节点上。


配置管理可交由ZooKeeper实现。可将配置信息写入ZooKeeper上的一个Znode。各个客户端服务器监听这个Znode。

一旦Znode中的数据被修改,ZooKeeper将通知各个客户端服务器。


2.3 统一集群管理

分布式环境中,实时掌握每个节点的状态是必要的。可根据节点实时状态做出一些调整。

ZooKeeper可以实现实时监控节点状态变化。可将节点信息写入ZooKeeper上的一个ZNode。监听这个ZNode可获取它

的实时状态变化。


2.4 服务器动态上下线

客户端能实时洞察到服务器上下线的变化。


2.5 软负载均衡

在Zookeeper中记录每台服务器的访问数,让访问数最少的服务器去处理最新的客户端请求。


三、zookeeper群集安装


下载地址:https://zookeeper.apache.org/releases.html


第一台zookeeper:192.168.8.10


1.解压安装包并移动到/usr/local/zookeeper

tar xf zookeeper-3.4.9.tar.gz

mv zookeeper-3.4.9 /usr/local/zookeeper


2.修改配置

cd /usr/local/zookeeper/conf/

cp zoo_sample.cfg zoo.cfg

vim zoo.cfg

dataDir=/usr/local/zookeeper/data

dataLogDir=/usr/local/zookeeper/logs

server.1=192.168.8.10:3188:3288

server.2=192.168.8.20:3188:3288

server.3=192.168.8.30:3188:3288


cd /usr/local/zookeeper

mkdir data logs

echo 1 > data/myid


/usr/local/zookeeper/bin/zkServer.sh start

/usr/local/zookeeper/bin/zkServer.sh status


scp -rp /usr/local/zookeeper  root@192.168.8.20:/usr/local/

scp -rp /usr/local/zookeeper  root@192.168.8.30:/usr/local/



第二台zookeeper:192.168.8.20

cd /usr/local/zookeeper/

echo 2 > data/myid

/usr/local/zookeeper/bin/zkServer.sh start

/usr/local/zookeeper/bin/zkServer.sh status


第三台zookeeper:192.168.8.30

cd /usr/local/zookeeper/

echo 3 > data/myid

/usr/local/zookeeper/bin/zkServer.sh start

/usr/local/zookeeper/bin/zkServer.sh status


======================================================

一、消息队列介绍

1.1 为什么需要消息队列 (MQ)

主要原因是由于在高并发环境下,同步请求来不及处理,请求往往会发生阻塞。比如大量的请求并发访问数据库,

导致行锁表锁,最后请求线程会堆积过多,从而触发 too many connection 错误,引发雪崩效应。


我们使用消息队列,通过异步处理请求,从而缓解系统的压力。消息队列常应用于异步处理,流量削峰,应用解耦,

消息通讯等场景当前比较常见的 MQ 中间件有 ActiveMQ、RabbitMQ、RocketMQ、Kafka等。


1.2 使用消息队列的好处

(1)解耦

允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。


(2)可恢复性

系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。


(3)缓冲

有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况。


(4)灵活性 & 峰值处理能力

在访问量剧增的情况下, 应用仍然需要继续发挥作用,但是这样的突发流量并不常见。如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。 使用消息队列能够使关键组件顶住突发的访问压力, 而不会因为突发的超负荷的请求而完全崩溃。


(5)异步通信很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制, 允许用户把一个消息放入队列, 但并不立即处理它。 想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。


1.3 消息队列的两种模式

(1)点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除)

消息生产者生产消息发送到消息队列中, 然后消息消费者从消息队列中取出并且消费消息。 消息被消费以后,

消息队列中不再有存储,所以消息消费者不可能消费到已经被消费的消息。消息队列支持存在多个消费者, 但是

对一个消息而言,只会有一个消费者可以消费。


(2)发布/订阅模式(一对多, 又叫观察者模式,消费者消费数据之后不会清除消息)

消息生产者 (发布)将消息发布到 topic 中,同时有多个消息消费者(订阅)消费该消息。和点对点方式不同,发布到 topic 的消息会被所有订阅者消费。

发布/订阅模式是定义对象间一种—对多的依赖关系,使得每当一个对象(目标对象)的状态发生改变,则所有依赖干它的对象(观察者对象)都会得到通知并自动更新。


二、Kafka相关介绍


2.1 Kafka定义

Kafka 是一个分布式的基于发布/订阅模式的消息队列(MQ,Message Queue),主要应用于大数据实时处理领域。


2.2 Kafka简介

Kafka 是最初由 Linkedin 公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于 Zookeeper协调的分布式消息中间件系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景,比如基于 hadoop的批处理系统、低延迟的实时系统、Spark/Flink 流式处理引擎,nginx 访问日志,消息服务等等,用 scala 语言编写, Linkedin 于 2010 年贡献给了 Apache 基金会并成为顶级开源项目。


2.3 Kafka的特性

高吞吐量、低延迟

Kafka 每秒可以处理几十万条消息,它的延迟最低只有几毫秒。每个 topic 可以分多个 Partition,Consumer Group 对 Partition 进行消费操作,提高负载均衡能力和消费能力。


可扩展性

kafka 集群支持热扩展


持久性、可靠性

消息被持久化到本地磁盘,并且支持数据备份防止数据丢失


容错性

允许集群中节点失败(多副本情况下,若副本数量为 n,则允许 n-1 个节点失败)


高并发

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

三、安装kafka群集

第一台zookeeper安装kafka:

1.解压并改名

tar xf kafka_2.11-2.2.1.tgz

mv kafka_2.11-2.2.1 /usr/local/kafka


2.修改配置

cd /usr/local/kafka/config/

cp server.properties server.properties.bak


vim server.properties

broker.id=1

listeners=PLAINTEXT://192.168.8.10:9092

log.dirs=/usr/local/kafka/logs

zookeeper.connect=192.168.8.10:2181,192.168.8.20:2181,192.168.8.30:2181

zookeeper.connection.timeout.ms=60000



3.复制kafka目录到其他服务器

scp -rp /usr/local/kafka/ root@192.168.8.20:/usr/local/

scp -rp /usr/local/kafka/ root@192.168.8.30:/usr/local/



第二台zookeeper安装kafka:

cd /usr/local/kafka/config/

vim server.properties

broker.id=2

listeners=PLAINTEXT://192.168.8.20:9092



第三台zookeeper安装kafka:

cd /usr/local/kafka/config/

vim server.properties

broker.id=3

listeners=PLAINTEXT://192.168.8.30:9092



三台服务器启动kafka服务:

cd /usr/local/kafka/bin

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


在第一台服务器发布消息:

cd /usr/local/kafka/bin

./kafka-console-producer.sh --broker-list 192.168.8.10:9092,192.168.8.20:9092,192.168.8.30:9092 --topic test


在第二台服务器订阅消息:

cd /usr/local/kafka/bin

./kafka-console-consumer.sh --bootstrap-server 192.168.8.10:9092,192.168.8.20:9092,192.168.8.30:9092 --topic test --from-beginning

相关文章
|
1月前
|
消息中间件 存储 算法
深度揭秘!Kafka和ZooKeeper之间的相爱相杀
**摘要:** 本文介绍了Kafka和ZooKeeper的角色及其关系。Kafka是分布式流处理平台,用于实时数据管道和流应用;ZooKeeper是分布式协调服务,处理同步和集群协调。在Kafka中,ZooKeeper存储元数据,管理集群成员,选举Controller。随着KIP-500提案,Kafka计划移除对ZooKeeper的依赖,转向基于Raft的共识机制,以简化架构、提高性能和一致性。此外,文章提到了etcd作为基于Raft的元数据存储系统的应用。本文旨在帮助读者理解ZooKeeper在Kafka面试中的重要性,并了解Kafka的未来发展方向。
77 2
|
21天前
|
消息中间件 存储 Kafka
kafka 在 zookeeper 中保存的数据内容
kafka 在 zookeeper 中保存的数据内容
31 3
|
1月前
|
消息中间件 NoSQL Kafka
日志收集平台项目nginx、kafka、zookeeper、filebeat搭建的基本配置(2)
日志收集平台项目nginx、kafka、zookeeper、filebeat搭建的基本配置(2)
|
1月前
|
消息中间件 应用服务中间件 Kafka
日志收集平台项目nginx、kafka、zookeeper、filebeat搭建的基本配置(1)
日志收集平台项目nginx、kafka、zookeeper、filebeat搭建的基本配置(1)
|
1月前
|
消息中间件 Kafka
kafka配置中启动zookeeper时没有启动成功的解决办法
kafka配置中启动zookeeper时没有启动成功的解决办法
|
3月前
|
消息中间件 Kafka
Kafka【部署 03】Zookeeper与Kafka自动部署脚本
【4月更文挑战第11天】Kafka【部署 03】Zookeeper与Kafka自动部署脚本
48 8
|
3月前
|
消息中间件 存储 数据管理
【Kafka】zookeeper对于kafka的作用是什么?
【4月更文挑战第6天】【Kafka】zookeeper对于kafka的作用是什么?
|
8天前
|
消息中间件 负载均衡 Java
"Kafka核心机制揭秘:深入探索Producer的高效数据发布策略与Java实战应用"
【8月更文挑战第10天】Apache Kafka作为顶级分布式流处理平台,其Producer组件是数据高效发布的引擎。Producer遵循高吞吐、低延迟等设计原则,采用分批发送、异步处理及数据压缩等技术提升性能。它支持按消息键值分区,确保数据有序并实现负载均衡;提供多种确认机制保证可靠性;具备失败重试功能确保消息最终送达。Java示例展示了基本配置与消息发送流程,体现了Producer的强大与灵活性。
27 3
|
1天前
|
消息中间件 SQL Java
实时数仓 Hologres产品使用合集之如何用python将kafka数据写入
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。
|
4天前
|
消息中间件 Kafka Apache
流计算引擎数据问题之Apache Kafka Streams 没有采用低水印方案如何解决
流计算引擎数据问题之Apache Kafka Streams 没有采用低水印方案如何解决
11 0

热门文章

最新文章