- 博客(81)
- 资源 (7)
- 收藏
- 关注
原创 深入学习Kafka:集群中Controller和Broker之间通讯机制分析 - ControllerChannelManager
所有博文均在个人独立博客http://blog.mozhu.org首发,欢迎访问!Kafka集群中,首先会选举出一个broker作为controller,然后该controller负责跟其他broker进行协调topic创建,partition主副本选举,topic删除等事务。 下面我们来分析controller和其他broker的通讯机制 controller会发三种请求给其他broker,
2017-12-11 15:59:15
3847
原创 深入学习Kafka:Topic的删除过程分析
所有博文均在个人独立博客http://blog.mozhu.org首发,欢迎访问!要删除Topic,需要执行下面命令:.\kafka-topics.bat --delete --zookeeper localhost:2181 --topic test这里假设zookeeper地址为localhost,要删除的topic是test,这条命令实际上是在zookeeper的节点/admin/delet
2017-12-11 15:58:46
13523
2
原创 深入学习Kafka:PartitionLeaderSelector源码分析
所有博文均在个人独立博客http://blog.mozhu.org首发,欢迎访问!PartitionLeaderSelector主要是为分区选举出leader broker,该trait只定义了一个方法selectLeader,接收一个TopicAndPartition对象和一个LeaderAndIsr对象。 TopicAndPartition表示要选leader的分区,而第二个参数表示zook
2017-12-11 15:56:59
1393
原创 深入学习Kafka:Leader Election - Kafka集群Leader选举过程分析
所有博文均在个人独立博客http://blog.mozhu.org首发,欢迎访问!本文所讲的Leader是指集群中的Controller,而不是各个Partition的Leader。为什么要有Leader?在Kafka早期版本,对于分区和副本的状态的管理依赖于zookeeper的Watcher和队列:每一个broker都会在zookeeper注册Watcher,所以zookeeper就会出现大量的
2017-12-11 15:55:41
7241
原创 Java分布式跟踪系统Zipkin(八):Zipkin源码分析-KafkaCollector
所有博文均在个人独立博客http://blog.mozhu.org首发,欢迎访问!前面几篇博文中,都是使用OkHttpSender来上报Trace信息给Zipkin,这在生产环境中,当业务量比较大的时候,可能会成为一个性能瓶颈,这一篇博文我们来使用KafkaSender将Trace信息先写入到Kafka中,然后Zipkin使用KafkaCollector从Kafka中收集Span信息。 在Brav
2017-12-05 17:06:45
6649
1
原创 Java分布式跟踪系统Zipkin(七):Zipkin源码分析-Zipkin的源码结构
所有博文均在个人独立博客http://blog.mozhu.org首发,欢迎访问!前面花了大量篇幅来介绍Brave的使用,一直把Zipkin当黑盒在使用,现在来逐渐拨开Zipkin的神秘面纱。 Zipkin的源代码地址为:https://github.com/openzipkin/zipkinZipkin的源码结构 - zipkin - 对应的是zipkin v1 - zipkin2 -
2017-12-05 16:57:08
10121
原创 Java分布式跟踪系统Zipkin(六):Brave源码分析-Brave和SpringBoot整合
所有博文均在个人独立博客http://blog.mozhu.org首发,欢迎访问!Zipkin是用当下最流行的SpringBoot开发的,SpringBoot将Spring项目的开发过程大大简化,一切主流的开发框架都可以通过添加jar包和配置,自动激活,现在越来越受广大Java开发人员的喜爱。 上一篇博文中,我们分析了Brave是如何在SpringMVC项目中使用的,这一篇博文我们继续分析Brav
2017-12-05 16:56:35
3533
原创 Java分布式跟踪系统Zipkin(五):Brave源码分析-Brave和SpringMVC整合
所有博文均在个人独立博客http://blog.mozhu.org首发,欢迎访问!上一篇博文中,我们分析了Brave是如何在普通Web项目中使用的,这一篇博文我们继续分析Brave和SpringMVC项目的整合方法及原理。 我们分两个部分来介绍和SpringMVC的整合,及XML配置方式和Annotation注解方式pom.xml添加相关依赖spring-web和spring-webmvc
2017-12-05 16:56:07
4310
原创 Java分布式跟踪系统Zipkin(四):Brave源码分析-HttpTracing
所有博文均在个人独立博客http://blog.mozhu.org首发,欢迎访问!上一篇博文中,我们分析了Tracing的相关源代码,这一篇我们来看看Brave是如何在Web项目中使用的我们先来看看普通的servlet项目中,如何使用Brave,这对我们后面分析和理解Brave和SpringMVC等框架整合有帮助首先Chapter1/servlet25项目中配置了FrontServlet和Backe
2017-12-05 16:55:35
4350
原创 Java分布式跟踪系统Zipkin(三):Brave源码分析-Tracing
所有博文均在个人独立博客http://blog.mozhu.org首发,欢迎访问!上一篇博文中,我们了解了Brave框架的基本使用,并且分析了跟Tracer相关的部分源代码。这篇博文我们接着看看Tracing的初始化及相关类的源代码public class TraceDemo { public static void main(String[] args) { Sender sende
2017-12-05 16:54:06
7607
1
原创 Java分布式跟踪系统Zipkin(二):Brave源码分析-Tracer和Span
所有博文均在个人独立博客http://blog.mozhu.org首发,欢迎访问!Brave是Java版的Zipkin客户端,它将收集的跟踪信息,以Span的形式上报给Zipkin系统。(Zipkin是基于Google的一篇论文,名为Dapper,Dapper在荷兰语里是“勇敢的”的意思,这也是Brave的命名的原因)Brave目前版本为4.9.1,兼容zipkin1和2的协议,github地址:h
2017-12-05 16:52:48
15968
原创 Java分布式跟踪系统Zipkin(一):初识Zipkin
所有博文均在个人独立博客http://blog.mozhu.org首发,欢迎访问!在2010年,谷歌发表了其内部使用的分布式跟踪系统Dapper的论文,讲述了Dapper在谷歌内部两年的演变和设计、运维经验。Twitter也根据该论文开发了自己的分布式跟踪系统Zipkin,并将其开源。 论文地址:http://static.googleusercontent.com/media/research.
2017-12-05 16:51:31
12882
2
原创 Keepalived+Nginx+Tomcat搭建高可用的Web服务(二):双主模式
前一篇博文中使用keepalived实现nginx的高可用,并且演示的是主备模式,这种方式有一台机器一直作backup使用,有50%的资源被浪费。而双主模式中,两台主机互为主备,同时有两台机器工作,当其中一台机器出现故障,两台机器的请求转移到一台机器负担。
2017-12-01 13:51:16
1320
原创 Keepalived+Nginx+Tomcat搭建高可用的Web服务(一):主备模式
前言Nginx和Apache都可以用来作为反向代理服务器,来提供负载均衡的能力,使我们的web服务器,能够水平扩容,从而处理更多的用户请求,但是反向代理服务器又变成了一个单点,当反向代理服务器挂了,整合Web服务器就不能被外界访问到,所以我们必须要保证反向代理服务器的高可用。 下面我们来演示下如何使用Keepalived,搭建高可用的Web服务,我们选择使用Nginx作为反向代理服务器。
2017-12-01 13:48:07
10134
3
原创 页面跳转到BackURL功能(基于struts2实现)
页面跳转到BackURL功能(基于struts2实现)应用场景:在查询用户列表/user!list.action时,点击新增用户,将跳转到/user!input.action现在需要新增成功后跳转到/user!list.action常规的做法是在UserAction里定义一个Result=RELOAD, location = "user!list.action",
2013-11-02 23:53:03
8960
原创 href="javascript:xxx(this);"和onclick="javascript:xxx(this);"的区别
href="javascript:xxx(this);"和onclick="javascript:xxx(this);"一直以为这两种写法是等同的,今天在项目中使用时发现前者的this根本拿不到触发事件的A标签,而后者可以拿到一般在做分页按钮时会用A标签来做,但是一般都会写之类的href="#"会导致分页在跳转时页面先跳到当前页面顶部用户体验不好,所以一般推荐写成甚至如果跳
2013-10-18 20:49:22
68988
原创 Win7重装系统后mysql数据库恢复
之前已经用mysql5的windows安装包安装了mysql5,之后由于重装了系统,但又不想重新安装,所以想手工恢复一下先前安装的mysql,我先前的安装目录是:d:/Mysql1. 执行 d:/Mysql/MySQLInstanceConfig.exe 只要出来界面即可!2. 然后运行regedit打开注册表,找到HKEY_LOCAL_MACHINE > Software > M
2013-09-18 16:46:20
2755
原创 Eclipse的Debug模式和Run模式性能差异
最近在做的项目中使用了sitemesh和urlrewriter,web.xml中又多了几个过滤器,因为自己刚开始在项目中使用urlwriter,而总觉得网上的一些介绍的教程都比较肤浅,不够深入,所以习惯了自己debug看源码,来学怎么使用。于是悲剧放生了,页面请求的时间以前在100毫秒左右就渲染出来了,在debug模式下居然要3-4秒,我起初以为是OpenSessionInViewFilter
2013-09-14 13:51:32
8341
原创 Win7远程桌面防火墙设置
将家里的路由器做了端口隐射,开启了远程桌面,这样可以很方便在公司连上家里的电脑进行一些操作,但是因为系统密码设置过于简单,必须要设置防火墙,避免密码遭人恶意破解设置过程如下:控制面板-Windows防火墙-高级设置-入站规则远程桌面TCP-IN
2013-09-12 10:00:51
6498
原创 VisualSVN防火墙设置
因工作需要,将家里的路由器做了端口隐射,给一起协同工作的朋友架了个SVN服务器,因为SVN账号密码都设置过于简单,所以需要在VisualSVN上设置下防火墙,过滤掉白名单以外的其他ip。因为VisualSVN内部使用的是Apache Server,所以配置方式也和Apache Server一致。 ... ... # Add Expires/Cache-Control
2013-09-12 09:43:10
6506
1
原创 org.hibernate.hql.ast.QuerySyntaxException: Category is not mapped [from Category]
org.hibernate.hql.ast.QuerySyntaxException: Category is not mapped [from Category where parent is null]原因是使用注解,改变了实体的名称@Entity(name="MZ_GAME_CATEGORY")public class Category{} 应该这样来定义实体@E
2012-01-03 14:38:59
3309
原创 Java排序算法(十三):补充-洗牌算法
Java排序算法(十三):补充-洗牌算法这个算法的要求是这样的:将N个数乱序后输出.由于和扑克牌的洗牌过程比较相似所以我也就称为洗牌算法了.很多地方都不自觉的需要这个算法的支持.也可以将这个算法扩展为从N个数中取出M个不重复的数(0思路:有n个数据的数据列,从第一个元素开始,随机
2011-07-10 23:39:15
8463
原创 Java排序算法(十二):总结
Java排序算法(十二):总结前面讲了10种基本的排序算法,现在来作下总结,基于下面几个方面来比较各个排序算法的优劣:时间复杂度,空间复杂度,稳定性,适用场景
2011-07-10 16:22:19
3066
原创 Java排序算法(十一):基数排序
Java排序算法(十一):基数排序基数排序已经不再是一种常规的排序方式,它更多地像一种排序方法的应用,基数排序必须依赖于另外的排序方法。基数排序的总体思路就是将待排序数据拆分成多个关键字进行排序,也就是说,基数排序的实质是多关键字排序。多关键字排序的思路是将待排数据里德排序关键字
2011-07-10 16:19:38
15817
1
原创 Java排序算法(十):桶式排序
Java排序算法(十):桶式排序桶式排序不再是一种基于比较的排序方法,它是一种比较巧妙的排序方式,但这种排序方式需要待排序的序列满足以下两个特征:待排序列所有的值处于一个可枚举的范围之类;待排序列所在的这个可枚举的范围不应该太大,否则排序开销太大。排序的具体步骤如下:(1)对于这
2011-07-10 15:26:40
6883
原创 Java排序算法(九):归并排序
Java排序算法(九):归并排序 归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide a
2011-07-08 00:25:41
65651
6
原创 Java排序算法(八):希尔排序(Shell排序)
Java排序算法(八):希尔排序(Shell排序)希尔排序(缩小增量法) 属于插入类排序,由Shell提出,希尔排序对直接插入排序进行了简单的改进:它通过加大插入排序中元素之间的间隔,并在这些有间隔的元素中进行插入排序,从而使数据项大跨度地移动,当这些数据项排过一趟序之后,希尔排
2011-07-07 22:41:42
14491
原创 Java排序算法(七):折半插入排序
Java排序算法(七):折半插入排序折半插入排序法,又称二分插入排序法,是直接插入排序法的改良版,不同之处在于,第i趟插入,先找出第i个元素应该插入的的位置,假定前1~i-1个数据是已经处于有序状态。代码实现:package sort;public class Binar
2011-07-06 21:10:21
9494
原创 Java排序算法(六):直接插入排序
直接插入排序的基本操作就是将待排序的数据元素按其关键字值的大小插入到前面的有序序列中。算法描述对一个有n个元素的数据序列,排序需要进行n-1趟插入操作:第1趟插入,将第2个元素插入前面的有序子序列--此时前面只有一个元素,当然是有序的。第2趟插
2011-07-05 23:11:20
4111
原创 Java排序算法(五):快速排序
Java排序算法(五):快速排序快速排序是一个速度非常快的交换排序算法,它的基本思路很简单,从待排的数据序列中任取一个数据(如第一个数据)作为分界值,所有比它小的数据元素放到左边,所有比它大的数据元素放到它的右边。经过这样一趟下来,该序列形成左右两个子序列,左
2011-07-05 22:32:23
4151
原创 Java排序算法(四):冒泡排序
Java排序算法(四):冒泡排序冒泡排序是计算机的一种排序方法,它的时间复杂度为O(n^2),虽然不及堆排序、快速排序的O(nlogn,底数为2),但是有两个优点:1.“编程复杂度”很低,很容易写出代码;2.具有稳定性,这里的稳定性是指原序列中相同元素的相对顺
2011-07-05 00:58:27
3405
原创 Java排序算法(三):堆排序
堆积排序(Heapsort)是指利用堆积树(堆)这种资料结构所设计的一种排序算法,可以利用数组的特点快速定位指定索引的元素。堆排序是不稳定的排序方法,辅助空间为O(1), 最坏时间复杂度为O(nlog2n) ,堆排序的堆序的平均性能较接近于最坏性能。 堆排序利
2011-07-04 23:56:19
40665
2
原创 Java排序算法(一):概述
Java排序算法(一):概述排序是程序开发中一种非常常见的操作,对一组任意的数据元素(或记录)经过排序操作后,就可以把他们变成一组按关键字排序的有序队列。对一个排序算法来说,一般从下面3个方面来衡量算法的优劣:时间复杂度:它主要是分析关键字的比较次数和记录的移
2011-07-04 22:14:08
2517
转载 深入Java集合学习系列:ArrayList的实现原理
深入Java集合学习系列:ArrayList的实现原理1. ArrayList概述: ArrayList是List接口的可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用
2011-07-04 20:09:54
1517
1
转载 深入Java集合学习系列:LinkedHashSet的实现原理
深入Java集合学习系列:LinkedHashSet的实现原理1. LinkedHashSet概述: LinkedHashSet是具有可预知迭代顺序的Set接口的哈希表和链接列表实现。此实现与HashSet的不同之处在于,后者维护着一个运行于所有条目
2011-07-04 20:03:46
1150
转载 深入Java集合学习系列:LinkedHashMap的实现原理
深入Java集合学习系列:LinkedHashMap的实现原理1. LinkedHashMap概述: LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不
2011-07-04 20:01:17
1174
转载 深入Java集合学习系列:HashSet的实现原理
深入Java集合学习系列:HashSet的实现原理1. HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。 2.
2011-07-04 19:57:57
2414
转载 深入Java集合学习系列:HashMap的实现原理
深入Java集合学习系列:HashMap的实现原理1. HashMap概述: HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 2
2011-07-04 19:55:13
1000
原创 Eclipse中Android项目XML文件的格式化配置
在Eclipse中使用ADT开发Android很方便,但也有些不如意的地方,如XML文件的格式化效果就很不理想。默认情况下,使用ADT的可视化界面布局,自动生成的xml文件中,一个控件的配置全动挤到一行上(效果如下所示),阅读、修改起来都很不方便。而我希
2011-07-04 19:10:11
862
转载 Java集合 - BlockingQueue
Java集合 - BlockingQueue 本例介绍一个特殊的队列:BlockingQueue,如果BlockQueue是空的,从BlockingQueue取东西的操作将会被阻断进入等待状态,直到BlockingQueue进了东西才会被唤醒.同样,如果BlockingQueue是满的,任何试图往里存东西的操作也会被阻断进入等待状态,直到BlockingQueue里有空间才会被唤醒继续操
2011-06-28 22:56:00
842
axis2-1.4.1.rar
2010-04-12
WebService大讲堂之Axis2(10):使用soapmonitor模块监视soap请求与响应消息
2010-04-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人