zookeeper+kafka

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 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
Kafka【部署 03】Zookeeper与Kafka自动部署脚本
【4月更文挑战第11天】Kafka【部署 03】Zookeeper与Kafka自动部署脚本
33 8
|
1月前
|
消息中间件 存储 数据管理
【Kafka】zookeeper对于kafka的作用是什么?
【4月更文挑战第6天】【Kafka】zookeeper对于kafka的作用是什么?
|
1月前
|
消息中间件 存储 Kafka
Kafka【环境搭建 02】kafka_2.11-2.4.1 基于 zookeeper 搭建高可用伪集群(一台服务器实现三个节点的 Kafka 集群)
【2月更文挑战第19天】Kafka【环境搭建 02】kafka_2.11-2.4.1 基于 zookeeper 搭建高可用伪集群(一台服务器实现三个节点的 Kafka 集群)
153 1
|
1月前
|
消息中间件 Kafka Docker
【docker专题_04】docker搭建kafka与zookeeper
【docker专题_04】docker搭建kafka与zookeeper
134 2
|
1月前
|
消息中间件 存储 Java
ZooKeeper 在 Kafka 中的应用
ZooKeeper 在 Kafka 中的应用
106 0
|
1月前
|
消息中间件 Java Kafka
使用Java编写代码安装Kafka及启动Zookeeper和Kafka
如何使用Java编写代码安装Kafka及启动Zookeeper和Kafka?其中包括安装前准备、修改配置文件、创建日志目录和数据目录等步骤,请提供详细实现过程。
50 0
|
1月前
|
消息中间件 Java Shell
Linux【脚本 03】shell脚本离线安装配置集结JDK+InfluxDB+Zookeeper+Kafka(安装文件及脚本源码网盘分享)
Linux【脚本 03】shell脚本离线安装配置集结JDK+InfluxDB+Zookeeper+Kafka(安装文件及脚本源码网盘分享)
33 0
|
22小时前
|
消息中间件 Java 关系型数据库
实时计算 Flink版操作报错合集之从 PostgreSQL 读取数据并写入 Kafka 时,遇到 "initial slot snapshot too large" 的错误,该怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
2天前
|
消息中间件 存储 SQL
实时计算 Flink版产品使用问题之kafka2hive同步数据时,如何回溯历史数据
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
2天前
|
消息中间件 存储 Kafka
实时计算 Flink版产品使用问题之 从Kafka读取数据,并与两个仅在任务启动时读取一次的维度表进行内连接(inner join)时,如果没有匹配到的数据会被直接丢弃还是会被存储在内存中
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。

热门文章

最新文章