分布式
分布式系列
优惠券已抵扣
余额抵扣
还需支付
¥79.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
学无止路
积极向上,坚持不懈的奋斗!
展开
-
设计模式(三)
设计模式(三)行为型模式重点关注对象之间的通信1 观察者模式1.1 定义观察者(Observer)模式定义:只多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖他的对象都得到通知并被自动更新,这种模式有时又称作发布-订阅模式、模型-视图模式,它是行为型模式。1.2 结构角色实现观察者模式时要注意具体目标对象和具体观察者对象之间不能直接调用,否则将使两者之间紧密耦合起来,这违反了面向对象的设计原则。观察者模式的主要角色如下。抽象主题(Subject)角色:也叫抽象目标类,它原创 2020-11-19 13:46:30 · 111 阅读 · 0 评论 -
设计模式(二)
设计模式(二)结构型模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。1 代理模式1.1 代理模式定义代理模式又叫委托模式,是为某个对象提供一个代理对象,并且由代理对象控制对原对象的访问。提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.举个例子来说明代理的作用:假设我们想邀请一位明星,那么并不是直接连接明星,而是联系明星的经纪人,来达到同样的目的.明星就是一个目标对象,他原创 2020-11-18 11:04:52 · 133 阅读 · 0 评论 -
设计模式(一)
设计模式(一)1 设计模式总览如图所示:2 创建型模式2.1 单例模式1.简介单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。使用工厂方法来限制实例化过程。这个方法应该是静态方法(类方法),因为让类的实例去生成另一个唯一实例毫无意义。2.要点1.某个类只能有一个实例。2.它必须自行创建这个实例。3.必须自行向整个系统提原创 2020-11-16 15:24:32 · 102 阅读 · 0 评论 -
软件设计原则
软件设计原则在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据 7 条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。这 7 种设计原则是软件设计模式必须尽量遵循的原则,各种原则要求的侧重点不同。开闭原则是总纲,它告诉我们要对扩展开放,对修改关闭;依赖倒置原则告诉我们要面向接口编程;单一职责原则告诉我们实现类要职责单一;接口隔离原则告诉我们在设计接口的时候要精简单一;里氏替换原则告诉我们不要破坏继承体系;合成复用原则告诉我们要原创 2020-11-15 11:23:07 · 203 阅读 · 0 评论 -
拾遗增补
拾遗增补1.1 线程的状态状态描述NEW尚未启动的线程处于这种状态RUNNABLE在Java虚拟机中正在执行的线程处于此状态BLOCKED补阻塞等待对象锁的线程处于此状态WAITING正在等待另一个线程执行特定动作的线程处于h此x状态TIME_WAITING正在等待另一个线程执行达到指定的等待时间的线程处于此状态TERMINATED已经退出运行的线程处于此状态如图所示:Java代码如下:@SuppressWarnings("all"原创 2020-09-14 17:25:32 · 120 阅读 · 0 评论 -
线程间的通信
线程间的通信线程是程序中独立的个体,但这些个体如果不经过处理就能成为一个整体。线程间的通信就是成为整体的必胜方案之一,可以说使线程间通讯后,线程之间的交互性会更强大,大大提高CPU复用率的同时还会使程序员对各线程任务在处理的过程中进行有效的把控与监督。1.1 wait与notify不使用wait与notifty实现线程间通讯有什么问题?Java代码如下:@SuppressWarnings("all") // 注解警告信息public class Demo01 { publi原创 2020-09-14 17:14:13 · 90 阅读 · 0 评论 -
Lock
Lock1.1 ReentranLock在Java多线程中,可以使用synchronized关键字来实现线程之间的同步互斥,但在JDK1.5中新增加ReentranLock类也可以达到同样的效果,并且在扩展功能上更加强大,比如具有嗅探锁定、多路分支通知等,而且在使用上也比synchronized更加灵活。使用ReentranLockJava代码如下:@SuppressWarnings("all") // 注解警告信息public class Demo01 { public s原创 2020-09-14 16:37:58 · 122 阅读 · 0 评论 -
分布式事务解决方案实战
分布式事务解决方案实战1 数据库事务ACIDA:原子性(Atomicity)一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。就像你买东西要么交钱收货一起都执行,要么要是发不出货,就退钱。C:一致性(Consistency)事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。如果事务成功地完成,那么系统中所有变化将正确原创 2020-10-30 08:35:55 · 240 阅读 · 1 评论 -
分布式锁解决方案实战
分布式锁解决方案实战1 为什么要学习分布式锁解决方案为了解决分布式架构带来的数据准确性问题!我们用synchronized或者 ReentrantLock 能解决问题吗?真实生产环境我们采用集群的方式去访问秒杀商品(nginx为我们做了负载均衡)。就会看到数据不一致的现象。如synchronized关键字的作用域其实是一个服务器进程(其实就是当前项目进程),在这个进程下面的所有线程都能够进行加锁。但是多进程就不行了。对于秒杀商品来说,这个值是固定的但是每个地区都可能有一台服务器。这样不同地区服务器原创 2020-10-30 08:36:27 · 174 阅读 · 0 评论 -
Session跨域共享及SSO解决方案实战
Session跨域共享及SSO解决方案实战1 什么是Session跨域共享所谓session跨域就是摒弃了系统(如tomcat)提供的session,而使用自定义的类似Session的机制来保存客户端数据的一种解决方案。如:通过设置cookie的domain来实现cookie的跨域传递。在cookie中传递一个自定义的session_id。这个session_id是客户端的唯一标记。将这个标记作为key,将客户端需要保存的数据作为value,在服务端进行保存(数据库保存或NOSQL)。这种机制是Sess原创 2020-10-30 08:34:55 · 245 阅读 · 1 评论 -
分布式定时任务调度实战
分布式定时任务调度实战1 为什么需要定时任务我们先思考下面几个业务场景的解决方案:支付系统每天凌晨1点跑批,进行一天清算,每月1号进行上个月清算。电商整点抢购,商品价格8点整开始优惠。12306购票系统,超过30分钟没有成功支付订单的,进行回收处理。商品成功发货后,需要向客户发送短信提醒。类似的业务场景非常多,我们怎么解决?很多业务场景需要我们某一特定的时刻去做某件任务,定时任务解决的就是这种业务场景。一般来说,系统可以使用消息传递代替部分定时任务,两者有很多相似之处,可以相互替换场景。如,原创 2020-10-30 08:36:53 · 385 阅读 · 2 评论 -
分布式全局ID生成方案
分布式全局ID生成方案1 背景分布式架构下,唯一序列号生成是我们在设计一个系统,尤其是数据库使用分库分表的时候常常会遇见的问题。当分成若干sharding表后,如何能够快速拿到一个唯一序列号,是经常遇到的问题。 在互联网的业务系统中,涉及到各种各样的ID,如在支付系统中就会有支付ID、退款ID等。那一般生成ID都有哪些解决方案呢?特别是在复杂的分布式系统业务场景中,我们应该采用哪种适合自己的解决方案是十分重要的2 特性需求保证生成的ID全局唯一今后数据在多个Shards之间迁移不会受到ID生成原创 2020-10-29 14:26:39 · 165 阅读 · 1 评论 -
远程通信协议RMI原理
远程通信协议RMI原理1 前言在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS 等,这些名词之间到底是些什么关系呢,它们背后到底是基于什么原理实现的呢,了解这些是实现分布式服务框架的基础知识,而如果在性能上有高的要求的话,那深入了解这些技术背后的机制就是必须的了解RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议。它原创 2020-10-29 13:55:29 · 896 阅读 · 2 评论 -
序列化、反序列化原理和Protobuf实现机制
序列化、反序列化原理和Protobuf实现机制1 基本概念1.1 什么是序列化和反序列化(1)Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程;(2)序列化:对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的完整性和可传递性。序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中。序列化后的字节流保存了Java对象的状态以及相关的描述信息。序列化机制的核心作用就是对象状态的保存与重建。(3)反序列化:客户端从文原创 2020-10-29 13:28:29 · 512 阅读 · 0 评论 -
HTTP以及HTTPS通信协议的原理分析
HTTP以及HTTPS通信协议的原理分析1 什么是HTTP1.1 HTTP与OSI模型HTTP全称:HyperText Transfer Protocol (超文本传输协议),是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。想了解http,就需要了解TCP,IP协议。因为http是基于TCP,IP层上面的。如下图OSI(Open Syst原创 2020-10-29 13:00:50 · 318 阅读 · 2 评论 -
分布式架构的发展及演进
分布式架构的发展及演进1. 为什么使用分布式架构1946年,世界上第一台电子计算机在美国的宾夕法尼亚大学诞生,它的名字是:ENICAC ,这台计算机的体重比较大,计算速度也不快,但是而代表了计算机时代的到来,再以后的互联网的发展中也有基础性的意义。计算机的组成是有五部分完成的,分别是:输入设备,输出设备,存储器,CPU里面有运算器和控制器,有一个冯诺依曼的模型非常形象的对象计算机的组成进行了描述,不过计算机也是有数据流,指令流,控制流来进行计算的和正常运转的。如图所示:ENIAC之后,电子计算机进入原创 2020-10-29 12:49:19 · 277 阅读 · 1 评论 -
并发工具类及线程池
并发工具类及线程池1 CyclicBarrier简介1.1 简介CyclicBarrier是一个同步的辅助类,允许一组线程相互之间等待,达到一个共同点,再继续执行。CyclicBarrier(循环屏障) 直译为可循环使用(Cyclic)的屏障(Barrier)。它可以让一组线程到达一个屏障(同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续工作。JDK中的描述:A synchronization aid that allows a set of threads原创 2020-10-29 12:38:42 · 122 阅读 · 0 评论 -
并发容器
并发容器1.1 什么是同步容器同步容器通过synchronized关键字修饰容器保证同一时刻内只有一个线程在使用容器,从而使得容器线程安全。synchronized的意思是同步,它体现在将多线程变为串行等待执行(但注意一点,符合操作不能保证线程安全。比如:A线程第一步获取尾节点,第二步将尾节点的值加1,但在A线程执行完第一步的时候,B线程删除了尾节点,在A线程执行第二步的时候就会报空指针)。1.2 什么是并发容器并发容器指的是允许多线程同时使用容器,并且保证线程安全。而为了达到尽可能提高并发,jav原创 2020-10-29 11:40:03 · 362 阅读 · 0 评论 -
并发理论及锁
并发理论及锁1.1并发在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。称之为并发。1.2 高并发短时间内会遇到大量的操作请求(比如:web系统集中大量访问,收到大量的请求。双十一、12306,会导致在短时间内会遇到大量的操作请求,如对资源的请求、数据库的操作)。1.3 高并发指标响应时间:系统对请求做出响应的时间。HTTP —>200ms吞吐量:在单位时间内处理请求的数量。吞吐量越高原创 2020-10-29 11:04:24 · 81 阅读 · 0 评论 -
Java并发理论知识
Java并发理论知识1.进程和线程进程:正在运行的程序的实例,具有一定独立功能的程序,关于某个数据聚合的一次运行活动。线程:进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每个线程执行不同的任务QQ:----进程发送信息接收信息发送文件 — 线程CPU、寄存器,RAM上下文:一个程序在得到CPU的时候,CPU就会去运行,在运行这个程序的时候,其他相关的资源,必须马上就位,包括内存资源、显卡。内存资源和显卡就是运行这个程序的执行环境,这个执行的环境就可以称为上下文。程序A:加载原创 2020-10-29 10:25:48 · 117 阅读 · 1 评论 -
源码分析之委派模式与适配器模式
源码分析之委派模式与适配器模式1.1 适配器模式结构型:从程序的结构上实现松耦合,从而扩大整体的类结构,用来解决更多更大的问题。适配器模式(Adapter Pattern) 将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)。适配器模式属于结构型模式。主要分为三类:类适配器模式、对象适配器模式、接口适配器模式。如图所示:适配器模式的角色划分Target目标抽象类:定义客户所需的接口,可以是抽象类原创 2020-10-28 16:25:59 · 125 阅读 · 0 评论 -
深度剖析代理模式
深度剖析代理模式1.1什么是代理模式代理(Proxy)是一种设计模式,提供了间接对目标对象进行访问的方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的功能上,增加额外的功能补充,即扩展目标对象的功能.。这就符合了设计模式的开闭原则,即在对既有代码不改动的情况下进行功能的扩展。代理(模式如图所示:代理模式的实现方式:静态代理,工程师编辑代理类代码,实现代理模式;在编译期就生成了代理类。基于JDK实现动态代理,通过jdk提供的工具方法Proxy.newProxyInstance原创 2020-10-28 15:51:01 · 164 阅读 · 0 评论 -
工厂模式与原型模式
工厂模式与原型模式1.1简单工厂模式什么是创建型?创建型模式,就是创建对象的模式,抽象了实例化的过程。它帮助一个系统独立于如何创建、组合和表示它的那些对象。关注的是对象的创建,创建型模式将创建对象的过程进行了抽象,也可以理解为将创建对象的过程进行了封装,作为客户程序仅仅需要去使用对象,而不再关心创建对象过程中的逻辑。是·针对用户,只需要关注结果,其实就是不关注产品的生产细节。简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工原创 2020-10-28 15:35:10 · 557 阅读 · 0 评论 -
源码分析之七大设计原则
源码分析之七大设计原则1…1 掌握设计模式的度?掌握设计模式的四个层次:1.没学之前是一点不懂,根本想不到用设计模式,写出的代码很糟糕;2.学了几个模式之后,于是总想着要用自己学过的模式,于是时常造成误用模式而自己却不知道;3.学完全部的模式之后,感觉模式之间都很相似,分不清差异,有困惑,但深知误用设计模式的害处,应用之时很犹豫。4.灵活应用模式,甚至不应用具体的某种模式也能设计出非常优秀的代码,以达到无剑胜有剑的境界。1.2 关于设计模式的一些理解1.设计模式,不是一种新的语言,也不是什么原创 2020-10-28 15:10:47 · 122 阅读 · 0 评论 -
基于Netty重构RPC框架
基于Netty重构RPC框架RPC:Remote Procedure Call 远程过程调用。常见的分布式RPC的框架:dubbo:2011年国内最开源的RPC框架,仅支持Java语言motan:微博内部使用的RPC框架 2016年开源的,仅支持Java语言Thrift:支持20多种语言gRPC:谷歌2015年对外开源的框架。支持很多语言目前流行的RPC框架:dubbo和SpringCloud。单一应用架构-- All in one —CURD 比如:58同城的站点。垂直应用架构-- We原创 2020-10-28 14:36:56 · 126 阅读 · 0 评论 -
Netty核心组件之二
Netty核心组件之二1 Netty心跳检测在Netty4中,使用IdleStateHandler实现心跳检测及空闲状态检测。我们知道使用netty的时候,大多数的东西都与Handler有关,我们的业务逻辑基本都是在Handler中实现的。Netty中自带了一个IdleStateHandler 可以用来实现心跳检测。心跳检测的逻辑本文中我们将要实现的心跳检测逻辑是这样的:服务端启动后,等待客户端连接,客户端连接之后,向服务端发送消息。如果客户端在“干活”那么服务端必定会收到数据,如果客户端“闲下来了原创 2020-10-28 14:09:40 · 62 阅读 · 0 评论 -
Netty核心组件之一
Netty核心组件之一1 Netty核心组件1.ChannelIO操作的一种连接,实体与实体之间的连接,实体可以是硬件,文件,网络套接字,或者是程序组件Channel 是 Netty 网络操作抽象类,它除了包括基本的 I/O 操作,如 bind、connect、read、write 之外,还包括了 Netty 框架相关的一些功能,如获取该 Channe l的 EventLoop。(这个 Channel 我们可以理解为 Socket 连接,它负责基本的 IO 操作,例如:bind(),connect()原创 2020-10-28 13:32:06 · 990 阅读 · 0 评论 -
IO模型及Netty线程模型
IO模型及Netty线程模型1 Netty简介1.1 简介版本:Netty4.X。Netty是基于NIO的异步网络通信框架。能快速的搭建高性能易扩展的网络应用程序(服务器/客户端)。Netty is an asynchronous event-driven network application frameworkfor rapid development of maintainable high performance protocol servers & clients.Net原创 2020-10-28 13:14:02 · 132 阅读 · 1 评论 -
Redis高性能高可用集群
Redis高性能高可用集群1 前言本章节我们使用:Sentinel+Twemproxy+Keepalive+Redis搭建高可用集群.我们通过之前的学习发现了一个问题,哨兵模式虽然可以自动选举,但是选举的过程中会出现服务短暂不可用的问题,随意我们就在想,能不能使用通过多个集群的方式来实现负载均衡和故障转移呢?答案是可以的!各元素职责:Redis:缓存服务器。Sentinel:主要作用于redis的主从复制集群的master故障后从新选举新的master。Twemproxy:redis的负载均原创 2020-10-28 11:30:03 · 101 阅读 · 0 评论 -
缓存问题解决方案&批量查询优化
缓存问题解决方案&批量查询优化1 缓存问题解决方案1.1 缓存穿透缓存没有,数据库也没有,业务系统访问压根就不存在的数据,导致每次访问都将压力挂到了数据库服务器上导致服务崩溃,一般来说都是恶意访问导致解决方案:1.缓存空数据第一,空值做了缓存,意味着缓存层中存了更多的键,需要更多的内存空间(如果是攻击,问题更严重),比较有效的方法是针对这类数据设置一个较短的过期时间,让其自动剔除。第二,缓存层和存储层的数据会有一段时间窗口的不一致,可能会对业务有一定影响。例如过期时间设置为 5 分钟,原创 2020-10-28 10:01:57 · 703 阅读 · 0 评论 -
Redis缓存与数据库双写一致性解决方案
Redis缓存与数据库双写一致性解决方案1 需求起因在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节。所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库!好了,我们现在引入缓存的概念,那么访问路程变成了如下:上面这个经典的读取缓存步骤一般没有什么问题,但是一旦涉及到数据更新:数据库和缓存更新,就容易出现缓存(Redis)和数据库间的数据一致性问题。有以下这些不一致的场景:1.当更新数据时,如更新某商品的库存,当前商品的库存是10原创 2020-10-27 15:09:53 · 610 阅读 · 2 评论 -
Redis主从复制、哨兵、集群
Redis主从复制、哨兵、集群1 为什么要使用Redis集群基于内存大小Redis是一个内存数据库,也就是说存储数据的容量不能超过主机内存大小。普通主机服务器内存一般几十G,但是我们需要存储大容量的数据(比如上百G的数据)怎么办?基于访问吞吐量Redis是基于内存处理,速度非常快,但是人的欲望是永无止境的,如果因为业务需要更快的处理,怎么办?2 Redis集群的方式主从复制哨兵Redis Cluster(推荐)2.1 主从复制1.主从复制实现 特点:1.Master会将数据同步原创 2020-10-27 06:00:34 · 75 阅读 · 0 评论 -
Redis进阶(发布订阅,PipeLine,持久化,内存淘汰)
Redis进阶(发布订阅,PipeLine,持久化,内存淘汰)1 发布订阅1.1 什么是发布订阅Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息并且可以订阅任意数量的频道。发布订阅(Pub/Sub):目前广泛使用的通信模型,它采用事件作为基本的通信机制,提供大规模系统所要求的松散耦合的交互模式:订阅者(如客户端)以事件订阅的方式表达出它有兴趣接收的一个事件或一类事件;发布者(如服务器)可将订阅者感兴趣的事件随时通知相关订阅者------是原创 2020-10-26 18:12:37 · 94 阅读 · 0 评论 -
Redis数据类型与存储结构
Redis数据类型与存储结构1 Redis是啥?能干啥?是啥:Redis是一个开源的,基于内存亦可持久化的日志型、高性能Key-Value数据库,并提供多种语言的API干啥:性能极高:Redis能读的速度是110000次/s,写的速度是81000次/s 。丰富的数据类型:Redis支持二进制案例的 Strings, Lists, Hashes, Sets及Ordered Sets数据类型操作。原子:Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多原创 2020-10-26 17:40:10 · 99 阅读 · 0 评论 -
在CentOS环境下安装Redis
在CentOS环境下安装Redis1.使用如下命令进入local目录下: cd /usr/local/如图所示:2.下载redis安装包 官网:https://redis.io/在虚拟机下载redis安装包的命令如下:wget http://download.redis.io/releases/redis-4.0.6.tar.gz如图所示,说明下载成功!3.解压压缩包的命令如下: tar -zxvf redis-4.0.6.tar.gz如图所示,说明解压成功!4.yum安装gcc依原创 2020-10-26 17:09:10 · 63 阅读 · 0 评论 -
搭建一个完整的实时日志统计平台
搭建一个完整的实时日志统计平台在互联网应用中,不管是哪一种处理方式,其基本的数据来源都是日志数据,例如对于web应来说,则可能是用户的访问日志、用户的点击日志等。如果对于数据的分析结果在时间上有比较严格的要求,则可以采用在线处理的方式来对数据进行分析,如使用Flink进行处理。比较贴切的一个例子是天猫双十一的成交额,在其展板上,我们看到交易额是实时动态进行更新的,对于这种情况,则需要采用在线处理。下面要介绍的是实时数据处理方式,即基于Flink的在线处理,在下面给出的完整案例中,我们将会完成下面的几项原创 2020-10-26 16:10:15 · 420 阅读 · 1 评论 -
Kafka实现应用日志实时上报统计分析
Kafka实现应用日志实时上报统计分析1 Flume插件1.1 简介Apache Flume 是一种分布式的、高可靠的、高可用的日志收集聚合系统,将不同来源海量的日志数据传输到集中的数据存储。Flume agent 负责把外部事件流(数据流)传输到指定下一跳,agent包括source(数据源)、channel(传输通道)、sink(接收端)。Flume agent可以多跳级联,组成复杂的数据流。 Flume 支持多种类型的source:Avro数据源(序列化数据格式)、Thrift数据源(通讯协原创 2020-10-26 15:15:07 · 233 阅读 · 0 评论 -
Kafka基于Zookeeper搭建高可用集群实战
Kafka基于Zookeeper搭建高可用集群实战1 前言1.1 高可用的由来为何需要Replication?在Kafka在0.8以前的版本中,是没有Replication的,一旦某一个Broker宕机,则其上所有的Partition数据都不可被消费,这与Kafka数据持久性及Delivery Guarantee的设计目标相悖。同时Producer都不能再将数据存于这些Partition中。如果Producer使用同步模式则Producer会在尝试重新发送message.send.max.re原创 2020-10-26 14:46:58 · 253 阅读 · 0 评论 -
Kafka底层原理分析
Kafka底层原理分析1 Kafka源码部署1.1 Scala环境变量因为Kafka是Java和Scala语言编写的,所以需要先安装配置JDK和Scala环境下载:首先到Scala官网下载Scala网址为https://www.scala-lang.org/download/,如图所示:PS:下载版本需要根据Kafka源码中scala版本要求如图所示:解压配置如下:安装成功后,查看 scala 的版本号:Scala -version,如图所示:1.2 下载Kafka源码包https://g原创 2020-10-26 13:44:23 · 306 阅读 · 0 评论 -
Kafka的设计思想及基本使用
Kafka的设计思想及基本使用1 Kafka的基本概念1.1 Kafka基本概念由于对JMS日常管理的过度开支和传统JMS可扩展性方面的局限,LinkedIn(www.linkedin.com)开发了Kafka以满足他们对实时数据流的监控以及对CPU、IO利用率等指标的高要求。在Linkedin开发Kafka之初,把关注重点集中在了这几个方面:高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对p原创 2020-10-26 13:03:06 · 193 阅读 · 0 评论