zookeeper + kafka集群搭建详解
文章目录
- 一、消息队列介绍
- 1.1 为什么需要消息队列 (MO)
- 1.2 使用消息队列的好处
- (1)解耦
- (2)可恢复性
- (3)缓冲
- (4)灵活性 & 峰值处理能力
- (5)异步通信很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制, 允许用户把一个消息放入队列, 但并不立即处理它。 想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。
- 1.3 消息队列的两种模式
- (1)点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除)
- (2)发布/订阅模式(一对多, 又叫观察者模式,消费者消费数据之后不会清除消息)
- 二、Kafka相关介绍
- 2.1 Kafka定义
- 2.2 Kafka简介
- 2.3 Kafka的特性
- 三、Kafka系统架构
- 3.1 Broker
- 3.2 Topic
- 3.3 Partition
- 3.4 Leader
- 3.5 Follower
- 3.7 Producer
- 3.8 Consumer
- 3.9 Consumer Group (CG )
- 3.10 offset偏移量
- 3.11 Zookeeper
- 四、部署zookeeper + kafka 集群
- 4.1 部署zookeeper + kafka 集群的具体实验步骤
- 1.检查之前zookeeper集群的状态,
- 2.在/opt目录下放入安装包,解压
- 3.移动并将配置文件进行备份
- 4.设置环境变量
- 5.配置 Zookeeper 启动脚本
- 6.设置开机自启并启动
- 测试阶段:
- 1.创建topic
- 2.查看当前服务器中的所有 topic
- 3.发布消息
- 4.消费消息
- 五、部署 Filebeat+Kafka+ELK
- 5.1 部署 Filebeat+Kafka+ELK的具体实验步骤
- 1.部署 Zookeeper+Kafka 集群
- 2.部署 Filebeat
- ① 两个node服务器状态如下:
- ② Apache服务器状态如下:
- 3.在node1服务器上对接kafka(因为之前在node1上做的filebeat)
- ① 安装httpd服务,后面要收集node1的Apache访问日志。
- ② 开启httpd服务
- ③ 修改日志采集路径
- ④启动 filebeat
- 4.部署 ELK,在 Logstash 组件所在节点上新建一个 Logstash 配置文件(192.168.153.80)
- ①修改配置文件
- ② 启动
- ③ 使用宿主机访问node1的Apache首页
- ④ 在node1上可以看到数据正在接受,刚刚访问的日志也可以看到
一、消息队列介绍
1.1 为什么需要消息队列 (MO)
主要原因是由于在高并发环境下,同步请求来不及处理,请求往往会发生阻塞。比如大量的请求并发访问数据库,导致行锁表锁,最后请求线程会堆积过多, 从而触发 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系统架构
3.1 Broker
一台 kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个 broker 可以容纳多个 topic。
3.2 Topic
可以理解为一个队列,生产者和消费者面向的都是一个 topic。类似于数据库的表名或者 ES 的 index物理上不同 topic 的消息分开存储。
3.3 Partition
为了实现扩展性,一个非常大的 topic 可以分布到多个 broker (即服务器)上,一个 topic 可以分割为一个或多个 partition,每个 partition 是一个有序的队列。Kafka 只保证 partition 内的记录是有序的,而不保证 topic 中不同 partition 的顺序。
每个 topid 至少有一个
partition,当生产者产生数据的时候,会根据分配策略选择分区,然后将消息追加到指定的分区的队列末尾。##Partation 数据路由规则;
1.指定了patition,则直接使用;
2.未指定 patition 但指定 key(相当于消息中某个属性),通过对 key 的 value 进行 hash 取模,选出一个 patition;
4. patition 和 key 都未指定,使用轮询选出一个 patition。
5.
每条消息都会有一个自增的编号,用于标识消息的偏移量,标识顺序从 0 开始。每个 partition 中的数据使用多个 segment 文件存储。
如果 topic 有多个 partition,消费数据时就不能保证数据的顺序
。严格保证消息的消费顺序的场景下 (例如商品秒杀、抢红包), 需要将 partition 数目设为 1。
broker 存储 topic 的数据。如果某 topic 有 N 个 partition,集群有 N 个 broker,那么每个 broker 存储该 topic的一个 partition。
如果某 topic 有 N 个 partition,集群有(N+M)个 broker,那么其中有 N 个 broker 存储 topic 的一个 partition剩下的 M 个 broker 不存储该 topic 的 partition 数据。
如果某 topic 有 N 个 partition,集群中 broker 数目少于 N 个,那么一个 broker 存储该 topic 的一个或多个 partition。在实际生产环境中,尽量避免这种情况的发生,这种情况容易导致 Kafka 集群数据不均衡。
分区的原因
方便在集群中扩展,每个Partition可以通过调整以适应它所在的机器,而一个topic又可以有多个Partition组成,因此整群就可以适应任意大小的数据了;
可以提高并发,因为可 以以Partition为单位读写了。
3.4 Leader
每个 partition 有多个副本,其中有且仅有一个作为 Leader,Leader 是当前负责数据的读写的 partition。
3.5 Follower
Follower 跟随 Leader,所有写请求都通过 Leader 路由,数据变更会广播给所有 Follower,Follower 与 Leader保持数据同步。Follower 只负责备份,不负责数据的读写。如果 Leader 故障,则从 Follower 中选举出一个新的 Leader。
如果 Leader 故障,则从 Follower 中选举出一个新的 Leader。
当 Follower 挂掉、卡住或者同步太慢,Leader 会把这个 Follower 从 ISR(Leader 维护的一个和 Leader 保持同步的 Follower 集合) 列表中删除,重新创建一个 Follower。
3.6 Replica
副本,为保证集群中的某个节点发生故障时,该节点上的 partition 数据不丢失,且 kafka 仍然能够继续工作,kafka提供了副本机制,一个 topic 的每个分区都有若干个副本,一个 leader 和若干个 follower
3.7 Producer
生产者即数据的发布者,该角色将消息发布到 Kafka 的 topic 中。
broker 接收到生产者发送的消息后,broker 将该消息追加到当前用于追加数据的 segment 文件中。生产者发送的消息,存储到一个 partition 中,生产者也可以指定数据存储的 partition。
3.8 Consumer
消费者可以从 broker 中读取数据。消费者可以消费多个 topic 中的数据。
3.9 Consumer Group (CG )
消费者组,由多个consumer 组成。
所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。可为每个消费者指定组名,若不指定组名则属于默认的
将多个消费者集中到一起去处理某-一个Topic的数据,可以更快的提高数据的消费能力。
消费者组内每个消费者负责消费不同分区的数据,一个分区只能由-一个组内消费者消费,防止数据被重复读取。
消费者组之间互不影响。
3.10 offset偏移量
以唯一的标识一条消息。
偏移量决定读取数据的位置,不会有线程安全的问题,消费者通过偏移量来决定下次读取的消息(即消费位置)。消息被消费之后,并不被马上册除,这样多个业务就可以重复使用 Kafka 的消息。某一个业务也可 以通过修改偏移量达到重新读取消息的目的,偏移量由用户控制。消息最终还是会被删除的,默认生命周期为 1 周 (7*24小时)。
3.11 Zookeeper
Kafka 通过 Zookeeper 来存储集群中各组件的 meta 信息(元信息)。
由于consumer在消费过程中可能会出现断电宕机等故障,consumer恢复后,需要从故障前的位置的继续消费,所以consumer需要实时记录自己消费到了哪个offset,以便故障恢复后继续消费。
Kafka 0.9版本之前,consumer 默认将offset 保存在Zookeeper 中;
从0.9版本开始,consumer默认将offset 保存在Kafka 一个内置的topic 中,该topic 为_consumer_ offsets。
四、部署zookeeper + kafka 集群
4.1 部署zookeeper + kafka 集群的具体实验步骤
1.检查之前zookeeper集群的状态,
由于步骤相同,我这里只展示一台设备的搭建!!
2.在/opt目录下放入安装包,解压
3.移动并将配置文件进行备份
//修改配置文件
4.设置环境变量
5.配置 Zookeeper 启动脚本
6.设置开机自启并启动
测试阶段:
1.创建topic
2.查看当前服务器中的所有 topic
//查看某个 topic 的详情
3.发布消息
4.消费消息
153.90服务器没先开启了消费消息,所以不能保证顺序显示消息,都能接收到
153.110服务器是发布消息后才开启了消费消息,所以可以不能保证顺序显示消息
五、部署 Filebeat+Kafka+ELK
5.1 部署 Filebeat+Kafka+ELK的具体实验步骤
1.部署 Zookeeper+Kafka 集群
参考上一个实验,filebeat+kafka已经部署完成。
2.部署 Filebeat
之前博客写过ELK的搭建,具体参考此篇博客:ELK 企业级日志分析系统,现在来检查一下ELK集群的状态。
① 两个node服务器状态如下:
② Apache服务器状态如下:
3.在node1服务器上对接kafka(因为之前在node1上做的filebeat)
① 安装httpd服务,后面要收集node1的Apache访问日志。
② 开启httpd服务
③ 修改日志采集路径
④启动 filebeat
4.部署 ELK,在 Logstash 组件所在节点上新建一个 Logstash 配置文件(192.168.153.80)
①修改配置文件
② 启动
③ 使用宿主机访问node1的Apache首页
④ 在node1上可以看到数据正在接受,刚刚访问的日志也可以看到
zookeeper + kafka集群搭建详解相关推荐
- Linux的企业-Codis 3集群搭建详解
Codis 3集群搭建详解 Codis 3介绍 对于Redis集群方案有好多种,基本常用的就是twemproxy,codis.redis cluster这三种解决方案,本人有幸工作中都大量使用过,各有 ...
- mysql cluster rpm包的作用_MySQL之——MySQL Cluster集群搭建详解(基于RPM安装包)
1.下载MySQL-cluster 7.3.7 http://dev.mysql.com/downloads/cluster/ 2.环境清理及安装 1)清理CentOS6.5自带的mysql服务,其中 ...
- Zookeeper+Kafka集群搭建
Zookeeper集群搭建 Kafka集群是把状态保存在Zookeeper中的,首先要搭建Zookeeper集群. 1.软件环境 (3台服务器-我的测试) 192.168.30.204 server1 ...
- Zookeeper+kafka集群搭建,问题(zoo.cfg file is running,it‘s probably not running,option ‘UseCompressedOops‘)
1. 下载Zookeeper 1.1 从Zookeeper官网选择对应版本下载,我这边是3.4.5,如下图. 1.2 将下载的压缩包拉到要安装集群主机的 /usr/local 目录(你也可以进入 /u ...
- Ceph分布式文件系统集群搭建详解
1.Ceph分布式文件系统简介 Ceph是一种为优秀的性能.可靠性和可扩展性而设计的统一的.分布式文件系统. Ceph 独一无二地在一个统一的系统中同时提供了对象.块.和文件存储功能. 基开发目标是: ...
- linux 上elasticsearch集群搭建详解,手把手教学(tar下载包)
1.安装jdk: 由于es是基于java的,所以先安装jdk: yum install java-1.8.0-openjdk* -y 此命令install结束后不用再去配置环境变量了,直接输入java ...
- MySQL分布式集群搭建详解
搭建MySQL分布式集群,例如:利用MySQL cluster ,MySQL proxy,MySQL replication,drdb等等,有人会问MySQL集群意义是什么呢?为一个数据库减轻负担,说 ...
- zookeeper 和 kafka 集群搭建
Kafka初识 1.Kafka使用背景 在我们大量使用分布式数据库.分布式计算集群的时候,是否会遇到这样的一些问题: 我们想分析下用户行为(pageviews),以便我们设计出更好的广告位 我想对用户 ...
- kafka集群搭建教程(使用自带的zookeeper)
kafka集群搭建教程(使用自带的zookeeper) 一.kafka简介 二.kafka名词解释 三.zookeeper与Kafka 四.kafka集群搭建前准备 1.下载 2.检验jdk 3.系统 ...
最新文章
- 最新!薪酬最高的大学专业公布!
- 阿里云 centos 远程可视化桌面部署
- 7-17 BCD解密(10 分)
- jmeter测试java代码
- 【openlayers】修改源码支持SLD的graphicfill属性
- 如何使自己的不和谐机器人
- Typora markdown公式换行等号对齐_下了31个markdown编辑器,我就不信选不出一个好用的...
- 云原生数据库如何打造业务弹性
- Java中的堆和栈的区别
- Java基础学习总结(4)——对象转型
- 搭建vue项目时运行npm run dev 报错问题解决
- English--动词时态
- 订阅号服务器消息推送数量,微信服务号一个月4次的推文次数用完了,怎么增加推送数量?...
- “蔚来杯“2022牛客暑期多校训练营1 J Serval and Essay(图的启发式合并)
- Java多用户商城源码/单商户商城系统源码
- khadas与树莓派_抛弃电信机顶盒,单板电脑打造家庭多媒体中心
- 02 LED的闪烁、模拟交通灯
- js 使用百度翻译api demo
- 为什么曾经优秀的老员工被辞退了?
- java上传文件(java上传文件夹)
热门文章
- 合泰单片机 熔丝_合泰单片机HT66F018红外发射C程序及电路图
- nginx upstream配置_Prometheus快速监控Nginx
- Windows环境下配置JDK
- android单选对话框代码,Android实现单选与多选对话框的代码
- java comet demo,[转]comet4j的简单应用
- java高并发(三)并发编程的基础
- Pandas数据挖掘与分析时的常用方法
- 数据科学家提高效率的 40 个 Python 技巧
- 你好~520|Python花式表白的几种姿势
- 这本《Python+TensorFlow机器学习实战》给你送到家!