- 博客(159)
- 收藏
- 关注
原创 关于后续文章说明,请大家移足查看
大家好,关于博客的内容,后续主要在如下地址中进行发表,这里的博客只是作为同步记录使用,有可能图片会不能显示出来,请大家移足到这里查看,谢谢。 http://www.jianshu.com/users/a9b2d43bb94e/latest_articles http://blog.csdn.net/u013970991?viewmode=contents...
2016-04-13 16:04:23 278
原创 深入淘宝Diamond之客户端架构解析
说明:本文不介绍如何使用Diamond,只介绍Diamond的实现原理一、什么是Diamonddiamond是淘宝内部使用的一个管理持久配置的系统,它的特点是简单、可靠、易用,目前淘宝内部绝大多数系统的配置,由diamond来进行统一管理。diamond为应用系统提供了获取配置的服务,应用不仅可以在启动时从diamond获取相关的配置,而且可以在运行中对配置数据...
2016-04-12 23:11:44 304
原创 玩转Flume之核心架构深入解析
玩转Flume之核心架构深入解析字数2224 阅读29 评论0 喜欢0前段时间我们分享过玩转Flume+Kafka原来也就那点事儿和Flume-NG源码分析-整体结构及配置载入分析这二篇文章,主要介绍了flume的简单使用和配置文件加载的全过程,那么今天我们重点分析flume核心原理,从而了解Source、Channel和Sink的全链路过程。一、Flume架构分析...
2016-04-01 15:46:14 409
原创 Flume-NG源码分析-整体结构及配置载入分析
Flume-NG源码分析-整体结构及配置载入分析 弦外之音很多朋友都在问我,经常看各种框架的源码会不会感到很枯燥,是什么东西在驱动着我一直看下去。其实我想说的很简单,作为一个程序员,不管你工作了多少年,能够经常学习和借鉴国内外优秀框架设计思想和程序架构,我想对我们来说是最直接的提高。终于开始Flume源码的分析研究工作了,我也是边学边和大家分享,内容上难免有不足...
2016-03-22 17:23:18 182
原创 玩转Flume+Kafka原来也就那点事儿
好久没有写分享了,继前一个系列进行了Kafka源码分享之后,接下来进行Flume源码分析系列,望大家继续关注,今天先进行开篇文章Flume+kafka的环境配置与使用。一、FLUME介绍Flume是一个分布式、可靠、和高可用的海量日志聚合的系统,支持在系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力...
2016-03-20 08:16:57 144
原创 Kafka之Consumer获取消费数据全过程图解
这篇文章是作为:[跟我学Kafka源码之Consumer分析](http://flychao88.iteye.com/blog/2268481) 的补充材料,看过我们之前源码分析的同学可能知道。本文将从客户端程序如何调用Consumer获取到最终Kafka消息的全过程以图解的方式作一个源码级别的梳理。 ...
2016-03-05 21:25:37 1882
原创 Akka框架性能的简单测试分析
因为最近工作的关系,要把异步任务从应用服务器中拆分到专门的异步处理服务器中.方案一是采用MQ的方式将任务消息发出,在服务端进行处理,如下图所示:Sample Flowchart Template (2).png这种方案是采用MQ作为中间的媒介,在服务端采用线程池异步处理任务,处理完成之后将结果发送到MQ中,客户端采用侦听的方式得到结果继续进行处理。这种方案的不足是...
2016-02-27 18:17:48 374
原创 跟我学Kafka之Controller控制器详解(一)
我们的kafka源码分享已经进行过很多期了,主要的内容也都分享的差不多了,那么那么在今后的分享中,主要集中在kafka性能优化和使用Kafka集群中的其中一个Broker会被选举为Controller,主要负责Partition管理和副本状态管理,也会执行类似于重分配Partition之类的管理任务。如果当前的Controller失败,会从其他正常的Broker中重新选举Contro...
2016-02-21 20:55:02 193
原创 跟我学Kafka之zookeeper的存储结构
一、zookeeper存储结构总图图片当我们kafka启动运行以后,就会在zookeeper上初始化kafka相关数据,主要包括六大类:consumersadminconfigcontrollerbrokerscontroller_epoch1、brokers节点结构说明1.1 topic信息结构/brokers/topics/[top...
2016-02-18 16:04:15 196
原创 跟我学Kafka之NIO通信机制
很久没有做技术方面的分享了,今天闲来有空写一篇关于Kafka通信方面的文章与大家共同学习。一、Kafka通信机制的整体结构74EACA88-8B9D-45F8-B7BF-202D658205A9.png这个图采用的就是我们之前提到的SEDA多线程模型,链接如下:http://www.jianshu.com/p/e184fdc0ade41、对于broker来说,客户端连接数量有限...
2016-02-01 18:54:19 177
原创 为什么说Kafka使用磁盘比内存快
学习过[跟我学Kafka源码之LogManager分析]的同学一定会问为什么Kafka大量使用了磁盘作为传统意义的缓存。其实Kafka最核心的思想是使用磁盘,而不是使用内存,可能所有人都会认为,内存的速度一定比磁盘快,我也不例外。在看了Kafka的设计思想,查阅了相应资料再加上自己的测试后,发现磁盘的顺序读写速度和内存持平。而且Linux对于磁盘的读写优化也比较多,包括read-ahe...
2016-01-25 23:00:24 284
原创 SEDA架构模型
一、传统并发模型的缺点基于线程的并发特点:每任务一线程直线式的编程使用资源昂高,context切换代价高,竞争锁昂贵太多线程可能导致吞吐量下降,响应时间暴涨。基于事件的并发模型特点:单线程处理事件每个并发流实现为一个有限状态机应用直接控制并发负载增加的时候,吞吐量饱和响应时间线性增长二、SEDA架构特点:(1)服务通过queue分解成stage: 每个stage代表...
2016-01-25 18:45:30 285
原创 【转】Java开发必会的Linux命令
作为一个Java开发人员,有些常用的Linux命令必须掌握。即时平时开发过程中不使用Linux(Unix)或者mac系统,也需要熟练掌握Linux命令。因为很多服务器上都是Linux系统。所以,要和服务器机器交互,就要通过shell命令。本文并不会对所有命令进行详细讲解,只给出常见用法和解释。具体用法可以使用--help查看帮助或者直接通过google搜索学习。1.查找文件...
2016-01-14 18:16:10 147
原创 Redis Lua脚本使用(资料备份)不是博客
./redis-cli EVAL "$(cat /root/redis-2.8.7/lua/count.lua)" 1 links:counter [root@iZ28a2ewhtoZ bin]# ./redis-cli SCRIPT LOAD "$(cat /root/redis-2.8.7/lua/count.lua)""693491b86cd84a1400c780806c...
2016-01-12 22:49:48 193
原创 Twemproxy测试用例以及压测结果
1、前端使用 Twemproxy 做代理,后端的 Redis 数据能基本上根据 key 来进行比较均衡的分布。后端一台 Redis 挂掉后,Twemproxy 能够自动摘除。恢复后,Twemproxy 能够自动识别、恢复并重新加入到 Redis 组中重新使用。 2、Redis 挂掉后,后端数据是否丢失依据 Redis 本身的策略配置,与 Twemproxy 基本无关。如果要新增...
2016-01-12 22:15:13 210
原创 跟我学Kafka源码之LogManager分析
一、kafka文件系统存储机制 1、partition存储结构说明假如kafka集群中只有一个broker,数据文件目录为message-folder,例如创建一个topic名称为:testKJ1, partitions=4存储路径和目录规则为:xxx/message-folder |--testKJ1-0...
2016-01-09 23:29:28 263
原创 深入理解并发之CompareAndSet(CAS)
一、CAS简介CAS:Compare and Swap, 翻译成比较并交换。 java.util.concurrent包中借助CAS实现了区别于synchronouse同步锁的一种乐观锁,使用这些类在多核CPU的机器上会有比较好的性能. CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。 今天...
2016-01-08 16:20:27 1337
原创 跟我学Kafka源码之Broker Server
本章,我们将进入到Kafka的核心类中进行代码走读,深入分析他的存储交互和消息分发原理。首先给大家展示一张服务端交互图,因为比较复杂我就没有再画,转发别人的一张图以供参考: 大家看完这个图以后相信有了一个整体认识,那么下面我们就重点从整体到细节的逐步分解。 一、KafkaServerStartable在Kafka的main入口中startup KafkaServerSt...
2016-01-06 14:49:16 363
原创 跟我学Kafka源码之Consumer分析
在上一章,我们跟踪了Producer源码的整体流程和一些细节,本章我们将重点跟踪Consumer的源码细节。Consumer的配置文件如下:Kafka Consumer配置:group.id: 指定consumer所属的consumer groupconsumer.id: ...
2016-01-04 15:06:53 509 1
原创 Kafka整体结构以及模块分析
一、Kafka源代码的工程结构如下图所示: 二、各模板简要说明admin:管理员模块,操作和管理topic,paritions相关,包含create,delete topic,扩展patitionsApi:该模块主要负责交互数据的组装,客户端与服务端交互数据编解码client:该模块比较简单就一个类,Producer读取kafka broker元数据信...
2015-12-29 18:27:46 357
原创 Scala class与Case class的区别
在网上发现一篇非常好的文章,正好我在做Scala系列博客,于是转载到我的博客中。在Scala中存在case class,它其实就是一个普通的class。但是它又和普通的class略有区别,如下: 1、初始化的时候可以不用new,当然你也可以加上,普通类一定需要加new;1scala> case class Iteblog(name:String)...
2015-12-25 16:36:22 604
原创 跟我学Kafka源码Producer分析
本章主要讲解分析Kafka的Producer的业务逻辑,分发逻辑和负载逻辑都在Producer中维护。 一、Kafka的总体结构图(图片转发) 二、Producer源码分析 class Producer[K,V](val config: ProducerConfig, private val eventHandler: ...
2015-12-25 15:10:29 236
转载 Scala中的下划线的作用
1、作为“通配符”,类似Java中的*。如import scala.math._2、:_*作为一个整体,告诉编译器你希望将某个参数当作参数序列处理!例如val s = sum(1 to 5:_*)就是将1 to 5当作参数序列处理。3、指代一个集合中的每个元素。例如我们要在一个Array a中筛出偶数,并乘以2,可以用以下办法:a.filter(_%2==0).map(2*_)。又如要对缓...
2015-12-23 14:53:08 209
原创 Scala学习笔记(一)
一、变量获取变量的值是一个耗时的工作时,可以考虑使用lazy var. lazy val forLater = someTimeConsumingOperation() 二、函数定义“=”并不只是用来分割函数签名和函数体的,它的另一个作用是告诉编译器是否对函数的返回值进行类型推断!如果省去=,则认为函数是没有返回值的!比如:scala> def myFirst...
2015-12-21 14:07:39 154
原创 【转】MYSQL出错代码列表
1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数据库文件导致删除数据库失败1010:不能删除数据目录导致删除数据库失败1011:删除数据库文件失败1012:不能读取系统表中的记录1020:记录已被其他用户修改1021:硬盘剩余空间不足,请加大硬盘可用空间1022:关键字重复,更改记录失败1023:关闭时发生...
2015-12-14 15:59:49 106
原创 Kafka常用命令行总结
以下是kafka常用命令行总结:1.查看topic的详细信息./kafka-topics.sh -zookeeper 127.0.0.1:2181 -describe -topic testKJ12、为topic增加副本./kafka-reassign-partitions.sh -zookeeper 127.0.0.1:2181 -reassignment-json-...
2015-12-10 14:47:08 209
原创 跟我学Kafka源码使用入门(三)
这一节咱们主要是讨论单机版的Kafka的简单使用,关于集群方面的东西其实也非常简单,具体可以参考Kafka官网进行配置既可。1、准备Zookeeper环境我们使用的是zookeeper-3.5.0版本。使用./zkServer.sh start命令启动Zookeeper使用ps -ax | grep zookeeper命令,出现下图所示:2、准备Kafka环境我们使...
2015-12-09 16:24:46 92
原创 跟我学Kafka源码配置文件简介(二)
1、Broker配置 2.Consumer主要配置 3.Producer主要配置 以上是关于kafka配置文件一些基础说明,在其中我们知道如果要kafka正常运行,必须还要配置zookeeper。...
2015-12-09 11:45:30 91
原创 跟学我Kakfa源码搭建环境(一)
Kafka is a distributed,partitioned,replicated commit logservice。它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。kafka对消息保存时根据Topic进行归类,发送消息者成为Producer,消息接受者成为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)成为b...
2015-12-08 13:59:17 113
原创 跟我学分布式事务之2PC和3PC
分布式一致性回顾在分布式系统中,为了保证数据的高可用,通常,我们会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上。为了对用户提供正确的增\删\改\差等语义,我们需要保证这些放置在不同物理机器上的副本是一致的。为了解决这种分布式一致性问题,前人在性能和数据一致性的反反复复权衡过程中总结了许多典型的协议和算法。其中比较著名的有二阶提交协议(Two Phase Com...
2015-12-07 15:20:31 2383
原创 跟我学Dubbo系列之Java SPI机制简介
SPI 简介SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现的机制, 举个例子来说, 有个接口,想运行时动态的给它添加实现,你只需要添加一个实现,通过一个简单例子来说明SPI是如何使用的。 首先通过一张图来看看,用SPI需要遵循哪些规范,因为spi毕竟...
2015-11-22 10:34:52 105
原创 跟我学系列之趣解NIO和IO的区别
在上一次分享中,咱们谈到了阻塞与非阻塞,同步与异步的区别,http://www.jianshu.com/p/e9c6690c0737那么在这一次分享中,咱们主要是以讲故事的方式讲述一下NIO和IO的区别。那么在下一次分享中,将进行Java NIO源码的分析。故事的背景:有一个动物园,动物园里面有狮子,老虎,猴子等动物,他们每天定期来吃不同的水果,而这些水果要由动物园管理员到货场领取...
2015-11-12 21:46:25 81
原创 同步,异步,阻塞和非阻塞的区别
一、概念异步:某个事情需要10s完成。而我只需要调用某个函数告诉xxx来帮我做(然后我再干其他的事情)同步:某个事情需要10s完成,我需要一直等它完成(等10s),再能继续后面的工作。阻塞:做某件事情,直到完成,除非超时非阻塞:尝试做,如果不能做,就不做(直接返回),如果能做,就做。 前两者和后两者不容易区分,不过前两者更多的有涉及到多线程交互(消息)的场景。 ...
2015-11-11 17:54:40 139
原创 【转】使用 VisualVM 进行性能分析及调优
概述开发大型 Java 应用程序的过程中难免遇到内存泄露、性能瓶颈等问题,比如文件、网络、数据库的连接未释放,未优化的算法等。随着应用程序的持续运行,可能会造成整个系统运行效率下降,严重的则会造成系统崩溃。为了找出程序中隐藏的这些问题,在项目开发后期往往会使用性能分析工具来对应用程序的性能进行分析和优化。VisualVM 是一款免费的性能分析工具。它通过 jvmstat、JMX、SA(...
2015-10-11 18:10:26 165
原创 Using Redis as an LRU cache文章翻译
周末有空翻译了:http://redis.io/topics/lru-cache#maxmemory-configuration-directive 具体如下: 当用Redis作为一个LRU存储时,有些时候是比较方便的,在你增添新的数据时会自动驱逐旧的数据。这种行为在开发者论坛是非常有名的,因为这是流行的memcached系统的默认行为。 LRU...
2015-09-14 14:55:23 136
原创 【转】如何用消息系统避免分布式事务?
前阵子从支付宝转账1万块钱到余额宝,这是日常生活的一件普通小事,但作为互联网研发人员的职业病,我就思考支付宝扣除1万之后,如果系统挂掉怎么办,这时余额宝账户并没有增加1万,数据就会出现不一致状况了。上述场景在各个类型的系统中都能找到相似影子,比如在电商系统中,当有用户下单后,除了在订单表插入一条记录外,对应商品表的这个商品数量必须减1吧,怎么保证?!在搜索广告系统中,当用户点击某广告后,除了...
2015-08-13 10:26:27 229
原创 一段JAVA线程池的设置引发的血案
应公司需求我们对一个项目进行了线上压力测试,结果发现,三台服务器一共只有59TPS,结果惨不忍睹。那么针对这样的场景,我们利用一周时间进行专注性的优化,寻找性能的瓶颈点。 第一步:我们针对线上的环境进行模拟,尽量真实的在测试环境中再现,采用数据库连接池为咱们默认的C3P0。那么当压测到二万批,100个用户同时访问的时候,并发量突然降为零!报错如下:Could ...
2015-07-18 17:59:21 167
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人