自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 【ZooKeeper】总体概述

ZooKeeper 介绍ZooKeeper 是什么ZooKeeper 是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实 现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、 Master 选举、分布式锁和分布式队列等功能。ZooKeeper 可以保证如下分布式一致性特性顺序一致性从同一个客户端发起的事务请求,最终将会严格地按照其发起顺序被应用到 ZooKeeper 中去。原子性所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,也就是说

2021-04-28 12:50:41 126

原创 Paxos 实现之 Chubby

ChubbyChubby是一个面向松耦合分布式系统的锁服务,GFS(Google File System)和Big Table等大型系统都是用它来解决分布式协作、元数据存储和Master选举等一些列与分布式锁服务相关的问题。Chubby的底层一致性实现就是以Paxos算法为基础,Chubby提供了粗粒度的分布式锁服务,开发人员直接调用Chubby的锁服务接口即可实现分布式系统中多个进程之间粗粒度的同控制,从而保证分布式数据的一致性。1 设计目标Chubby被设计成为一个需要访问中心化的分布式锁服务。

2021-04-28 12:50:22 936

转载 Raft 与 Zab 对比

0 一致性问题一致性算法在实现状态机这种应用时,有哪些常见的问题:1 leader选举1.1 一般的leader选举过程选举的轮次选举出来的leader要包含更多的日志1.2 leader选举的效率会不会出现split vote?以及各自的特点是?1.3 加入一个已经完成选举的集群怎么发现已完成选举的leader?加入过程是否对leader处理请求的过程造成阻塞?1.4 leader选举的触发谁在负责检测需要进入leader选举?2 上一轮次

2021-04-27 17:46:35 983

原创 分布式一致性算法(三):ZAB

1 ZAB介绍ZAB协议全称就是ZooKeeper Atomic Broadcast protocol,是ZooKeeper用来实现一致性的算法,分成如下4个阶段。先来解释下部分名词electionEpoch:每执行一次leader选举,electionEpoch就会自增,用来标记leader选举的轮次peerEpoch:每次leader选举完成之后,都会选举出一个新的peerEpoch,用来标记事务请求所属的轮次zxid:事务请求的唯一标记,由leader服务器负责进行分配。由2部分构成,高32

2021-04-27 17:45:26 421

转载 实例详解 ZooKeeper ZAB 协议

ZooKeeper是什么ZooKeeper是一个分布式协调服务,可用于服务发现、分布式锁、分布式领导选举、配置管理等。这一切的基础,都是ZooKeeper提供了一个类似于Linux文件系统的树形结构(可认为是轻量级的内存文件系统,但只适合存少量信息,完全不适合存储大量文件或者大文件),同时提供了对于每个节点的监控与通知机制。既然是一个文件系统,就不得不提ZooKeeper是如何保证数据的一致性的。本节将将介绍ZooKeeper如何保证数据一致性,如何进行领导选举,以及数据监控/通知机制的语义保证。Z

2021-04-27 17:44:35 300

原创 分布式一致性算法(二):Raft

1 leader选举1.1 刚开始所有server启动都是follower状态然后等待leader或者candidate的RPC请求、或者超时。上述3种情况处理如下:leader的AppendEntries RPC请求:更新term和leader信息,当前follower再重新重置到follower状态candidate的RequestVote RPC请求:为candidate进行投票,如果candidate的term比自己的大,则当前follower再重新重置到follower状态超时:转

2021-04-27 14:47:45 127

转载 一文搞懂 Raft 算法

一文搞懂Raft算法正文raft是工程上使用较为广泛的强一致性、去中心化、高可用的分布式协议。在这里强调了是在工程上,因为在学术理论界,最耀眼的还是大名鼎鼎的Paxos。但Paxos是:少数真正理解的人觉得简单,尚未理解的人觉得很难,大多数人都是一知半解。本人也花了很多时间、看了很多材料也没有真正理解。直到看到raft的论文,两位研究者也提到,他们也花了很长的时间来理解Paxos,他们也觉得很难理解,于是研究出了raft算法。raft是一个共识算法(consensus algorithm),所谓共识,

2021-04-27 14:46:38 485

原创 分布式一致性算法(一):Paxos

Paxos 算法Paxos 算法是莱斯利·兰伯特于1990年提出的一种基于消息传递且具有高度容错特性的一致性算法。问题分布式系统中的节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing)。基于消息传递通信模型的分布式系统,不可避免的会发生以下错误:进程可能会慢、被杀死或者重启,消息可能会延迟、丢失、重复,在基础 Paxos 场景中,先不考虑可能出现消息篡改即拜占庭错误的情况。Paxos 算法解决的问题是在一个可能发生上述异常的分布式系统中如何就某

2021-04-27 14:45:37 376 2

转载 Paxos算法原理与推导

分布式系列文章——Paxos算法原理与推导Paxos算法在分布式领域具有非常重要的地位。但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难。网上有很多讲解Paxos算法的文章,但是质量参差不齐。看了很多关于Paxos的资料后发现,学习Paxos最好的资料是论文《Paxos Made Simple》,其次是中、英文版维基百科对Paxos的介绍。本文试图带大家一步步揭开Paxos神秘的面纱。Paxos是什么Paxos算法是基于消息传递且具有高度容错特性的一致性算法,是目前公认的解决

2021-04-27 14:14:10 156

原创 分布式事务的解决方案

两阶段提交/XA2PC, 是 Two-Phase Commit 的缩写,即二阶段提交,是计算机网络尤其是在数据库领域 内,为了使基于分布式系统架构下的所有节点在进行事务处理过程中能够保持原子性和一致性而设计的一种算法。通常,二阶段提交协议也被认为是一种一致性协议,用来保 证分布式系统数据的一致性。目前,绝大部分的关系型数据库都是采用二阶段提交协议 来完成分布式事务处理的,利用该协议能够非常方便地完成所有分布式事务参与者的协 调,统一决定事务的提交或回滚,从而能够有效地保证分布式数据一致性,因此二阶段 提

2021-04-27 13:57:11 78

原创 从 ACID 到 CAP/BASE

ACID事务 (Transaction) 是由一系列对系统中数据进行访问与更新的操作所组成的一个程序 执行逻辑单元(Unit), 狭义上的事务特指数据库事务。一方面,当多个应用程序并发访 问数据库时,事务可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相 干扰。另一方面,事务为数据库操作序列提了一个从失败中恢复到正常状态的方法, 同时提供了数据库即使在异常状态下仍能保持数据一致性的方法。 事务具有四个特征,分别是原子性( Atomicity) 、一致性( Consistency) 、隔离性 (I

2021-04-27 13:56:58 99 2

原创 分布式系统的特点及问题

分布式的特点在《分布式系统概念与设计》注’一书中,对分布式系统做了如下定义:分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。上面这个简单的定义涵盖了几乎所有有效地部署了网络化计算机的系统。严格地讲,同 一个分布式系统中的计算机在空间部署上是可以随意分布的,这些计算机可能被放在不同的机柜上,也可能在不同的机房中,甚至分布在不同的城市。无论如何,一个标准的 分布式系统在没有任何特定业务逻辑约束的情况下,都会有如下几个特征。分布性分布式系统中的多

2021-04-27 13:56:39 605

原创 分布式锁与技术选型

分布式锁1 为何需要分布式锁Martin Kleppmann是英国剑桥大学的分布式系统的研究员,之前和Redis之父Antirez进行过关于RedLock(红锁,后续有讲到)是否安全的激烈讨论。Martin认为一般我们使用分布式锁有两个场景:效率:使用分布式锁可以避免不同节点重复相同的工作,这些工作会浪费资源。比如用户付了钱之后有可能不同节点会发出多封短信。正确性:加分布式锁同样可以避免破坏正确性的发生,如果两个节点在同一条数据上面操作,比如多个节点机器对同一个订单操作不同的流程有可能会导致该笔订

2021-04-18 15:24:14 227

原创 Zookeeper 特点及关键特性

1 ZooKeeper简介ZooKeeper 是一个开源的分布式协调框架,它的定位是为分布式应用提供一致性服务,是整个大数据体系的管理员。ZooKeeper 会封装好复杂易出错的关键服务,将高效、稳定、易用的服务提供给用户使用。如果上面的官方言语你不太理解,你可以认为 ZooKeeper = 文件系统 + 监听通知机制。1.1 文件系统Zookeeper维护一个类似文件系统的树状数据结构,这种特性使得 Zookeeper 不能用于存放大量的数据,每个节点的存放数据上限为1M。每个子目录项如 Nam

2021-04-16 20:59:44 2074

转载 RocketMQ 与 Kafka 性能对比大揭秘

1、文件布局1.1 Kafka 文件布局Kafka 文件在宏观上的布局如下图所示:正如上图所示,Kafka 文件布局的主要特征如下:文件的组织以 topic + 分区进行组织,每一个 topic 可以创建多个分区,每一个分区包含单独的文件夹,并且是多副本机制,即 topic 的每一个分区会有 Leader 与 Follow,并且 Kafka 内部有机制保证 topic 的某一个分区的 Leader 与 follow 不会存在在同一台机器,并且每一台 broker 会尽量均衡的承担各个分区的 Lea

2021-04-12 21:11:13 204

原创 RocketMQ 与 Kafka 主要异同

相同点总得来讲两者底层原理有很多相似之处,RocketMQ借鉴了Kafka的设计两者均采用顺序写、零拷贝机制进行写消息与发送消息,极大地保证了系统的性能不同点部署架构不同高可用RocketMQ在高可用设计上粒度只控制在Broker。其保证高可用是通过master-slave主从复制来解决的。Kafka控制高可用的粒度是放在分区上。每个topic的leader分区和replica分区都可以在所有broker上负载均衡的存储。Kafka的这种设计相比RocketMQ这种主从复制的设计有以

2021-04-12 21:02:04 737

原创 RocketMQ 核心原理总结

Topic 的路由机制介绍路由注册机制之前,先简单看下 RocketMQ 的整体架构:Producer:消息生产者,用于向消息服务器发送消息;NameServer:路由注册中心;Broker:消息存储服务器;Consumer:消息消费者,该流程图中未涉及;联通性:A. NameServer 之间互不通信,无法感知对方的存在。B. Producer 生产者与 NameServer 集群中的一台服务器建立长连接,并持有整个 NameServer 集群的列表。C. Broker 服务会与

2021-04-12 18:23:05 321

原创 Kafka 请求处理流程、重平衡流程

Kafka 请求处理流程响应式模型Kafka 采用的是一种 响应式(Reactor)模型,那么什么是响应式模型呢?简单的说,Reactor 模式是事件驱动架构的一种实现方式,特别适合应用于处理多个客户端并发向服务器端发送请求的场景,如下图所示Kafka 的 broker 端有个 SocketServer 组件,类似于处理器,SocketServer 是基于 TCP 的 Socket 连接的,它用于接受客户端请求,所有的请求消息都包含一个消息头,消息头中都包含如下信息Request type (也

2021-04-12 17:27:32 272

原创 Kafka Broker Controller、副本机制

Broker Controllerbroker 之间也有一个控制器组件(Controller),它是 Kafka 的核心组件。它的主要作用是在 ZooKeeper 的帮助下管理和协调整个 Kafka 集群,集群中的每个 broker 都可以称为 controller,但是在 Kafka 集群启动后,只有一个 broker 会成为 Controller 。ZooKeeper 的数据是保存在节点上的,每个节点也被称为znode,znode 节点是一种树形的文件结构,它很像 Linux 操作系统的文件路径,Z

2021-04-12 17:27:19 603

原创 Kafka 顺序消费问题

自定义分区器定义分区器public class MyPartitioner implements Partitioner { private final AtomicInteger counter = new AtomicInteger(0); @Override public int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster clus

2021-04-12 17:26:49 1599

原创 Kafka Consumer 核心知识

Kafka Consumer应用程序使用 KafkaConsumer 从 Kafka 中订阅主题并接收来自这些主题的消息,然后再把他们保存起来。应用程序首先需要创建一个 KafkaConsumer 对象,订阅主题并开始接受消息,验证消息并保存结果。一段时间后,生产者往主题写入的速度超过了应用程序验证数据的速度,这时候该如何处理?如果只使用单个消费者的话,应用程序会跟不上消息生成的速度,就像多个生产者像相同的主题写入消息一样,这时候就需要多个消费者共同参与消费主题中的消息,对消息进行分流处理。Ka

2021-04-12 17:26:25 1038

原创 Kafka Producer 核心知识

Kafka Producer消息的产生非常简单,但是消息的发送过程还是比较复杂的,如图我们从创建一个ProducerRecord 对象开始,ProducerRecord 是 Kafka 中的一个核心类,它代表了一组 Kafka 需要发送的 key/value 键值对,它由记录要发送到的主题名称(Topic Name),可选的分区号(Partition Number)以及可选的键值对构成。在发送 ProducerRecord 时,我们需要将键值对对象由序列化器转换为字节数组,这样它们才能够在网络上传输

2021-04-12 17:24:18 753

原创 Kafka 的 Java Api 与 SpringBoot Api

Java 操作 Kafka依赖<dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>2.0.0</version> </dependency>Producer方式一:同步调用public class MyKafKaProd

2021-04-12 17:23:45 127

原创 Kafka 基础知识与重要配置

基础知识什么是 KafkaKafka 是由 Linkedin 公司开发的,它是一个分布式的,支持多分区、多副本,基于 Zookeeper 的分布式消息流平台,它同时也是一款开源的基于发布订阅模式的消息引擎系统。Kafka 的基本术语消息:Kafka 中的数据单元被称为消息,也被称为记录,可以把它看作数据库表中某一行的记录。批次:为了提高效率, 消息会分批次写入 Kafka,批次就代指的是一组消息。主题:消息的种类称为 主题(Topic),可以说一个主题代表了一类消息。相当于是对消息进行分类。主题

2021-04-12 17:22:28 451

原创 Kafka 安装与基本操作

Kafka安装部署单机模式1、下载kafka。https://kafka.apache.org/downloads2、安装解压。已经编译好的,直接解压就行(tar -zxvf kafka_2.11-2.0.0.tgz )3、启动zookeeper。因为 kafka 的注册中心是 zk,所以需要先启动zookeeper节点kafka 内置了 zookeeper 的服务,所以在 bin 目录下提供了 zk 的启动和关闭脚本 zookeeper-server-start.sh 和 zoo

2021-04-11 19:28:34 131

原创 HBase 的 Java Api

整合依赖 <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>2.2.5</version> </dependency> <dependency>

2021-04-11 18:30:44 108

原创 HBase 安装与 Hbase Shell

Docker 安装 HBase搜索 HBase 镜像docker search hbase下载 HBase 镜像docker pull harisekhon/hbase创建容器docker create --name myhbase \-p 2181:2181 -p 16000:16000 -p 16010:16010 -p 16020:16020 -p 16030:16030 \harisekhon/hbase启动容器docker start myhbase登录 HBase

2021-04-11 18:30:25 108

原创 HBase 列族属性

一、创建表及属性查看创建一个测试表 test,列族为 cf:create 'test', {NAME => 'cf'}默认属性如下:hbase > describe 'test'{NAME => 'cf', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING =>

2021-04-11 18:30:11 1193

原创 HBase 基础知识

HBase基础知识一、HBase简介HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。HBase利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协调工具。二、HBase三要素1、主键:Row Key (主键是用来检索记录的主键,访问hbase table中的行,只有三种方式

2021-04-11 18:29:51 1210 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除