自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(130)
  • 资源 (5)
  • 收藏
  • 关注

原创 做中间件的这两年总结(201704-201905)

新的篇章即将拉起,是时候给自己的这两年来个总结了。一、篇前总结这两年,从北京来到了杭州。从一个北漂变成了杭漂,买了房,买了车,养了条柯基,在这座江南城市生了根。父母健康,家庭和睦。日子过得温馨,感谢父母,感谢媳妇。这两年,完成了研究生的课程,通过了研究生的答辩。不枉我们杭州北京来回跑,飞机高铁卧铺的来回切换。每次都从南京转车,一晚卧铺的卧铺到北京。飞机取消了好几次。在学校前面的宾馆住了好多次...

2019-05-06 16:59:20 370

原创 NIO基础之同步、异步、阻塞、非阻塞

这里区分几个概念,也是常见但是容易混淆的概念,就是标题中的同步、异步、阻塞、非阻塞。一、同步与异步同步与异步,关心的是消息通信的机制。也就是调用者和被调用者之间,消息是如何进行通知的。如果是调用者主动等待调用的结果,那么就是同步。如果是被调用者主动去通知调用者,就是异步。从上面的描述中,我们可以看到。同步还是异步,主要是看的消息通知的方式,一个是调用者主动等待,一个是调用者被通知。二、阻塞与...

2019-02-11 14:10:21 265

原创 【源码分析】HashMap源码再读-基于Java8

最近工作不是太忙,准备再读读一些源码,想来想去,还是先从JDK的源码读起吧,毕竟很久不去读了,很多东西都生疏了。当然,还是先从炙手可热的HashMap,每次读都会有一些收获。当然,JDK8对HashMap有一次优化一、一些参数我们首先看到的,应该是它的一些基本参数,这对于我们了解HashMap有一定的作用。他们分别是:参数说明capacity容量,默认为16,最大为2^...

2019-01-30 13:53:06 214

原创 我的公众号开通啦

ladies and 乡亲们,我新开通了一个微信公众号,分享一些自己所得,希望能得到您的关注,谢谢。

2019-01-22 18:01:03 216

原创 【Canal源码分析】TableMetaTSDB

这是Canal在新版本引入的一个内容,主要是为了解决由于历史的DDL导致表结构与现有表结构不一致,导致的同步失败的问题。采用的是Druid和Fastsql,来记录表结构到DB中,如果需要进行回滚时,得从DB中根据时间点去查到对应的库表结构,然后进行业务的处理。也就是,如果我们想要这样的效果,需要开启TSDB的功能,同时要新增库表来记录表结构的变更。这个基本上是在parser启动时,寻找位点时需...

2018-05-31 13:49:21 1498

原创 【Canal源码分析】重要类图

从Canal的整体架构中,我们可以看出,在Canal中,比较重要的一些领域有Parser、Sink、Store、MetaManager、CanalServer、CanalInstance、CanalClient、Connection等等。下面我们仔细分析下Canal的领域模型。一、Parser核心是AbstractEventParser,主要干活的是MysqlEventParser。...

2018-05-31 10:52:29 405

原创 【Canal源码分析】整体架构

本文详解canal的整体架构。一、整体架构说明:server代表一个canal运行实例,对应于一个jvminstance对应于一个数据队列 (1个server对应1..n个instance)instance模块:eventParser (数据源接入,模拟slave协议和master进行交互,协议解析)eventSink (Parser和Store链接器,进...

2018-05-30 17:24:36 1824

原创 【Canal源码分析】配置项

本文讲解canal中的一些配置含义。一、配置加载图二、配置文件canal.properties2.1 common参数定义比如可以将instance.properties的公用参数,抽取放置到这里,这样每个instance启动的时候就可以共享. 【instance.properties配置定义优先级高于canal.properties】 参数名 含义...

2018-05-30 16:32:37 723

原创 【Canal源码分析】数据传输协议

Canal的数据传输有两块,一块是进行binlog订阅时,binlog转换为我们所定义的Message,第二块是client与server进行TCP交互时,传输的TCP协议。一、EntryProtocal这块是binlog的一个存储。主要的格式如下:Entry Header version [协议的版本号,default = 1] ...

2018-05-30 14:07:56 524

原创 【Canal源码分析】client工作过程

client的工作过程,需要我们自己去编写对应的逻辑,我们目前只能从example写的例子来看。目前examle中提供了两个例子,一个是单机的,一个是集群的cluster,我们后续如果需要进行开发的话,其实也是开发我们自己的client,以及client的一些逻辑。我们主要看下集群的client是如何实现和消费的,又是怎么和server进行数据交互的。我们来看看具体的代码:protec...

2018-05-29 16:43:46 1786

原创 【Canal源码分析】Sink及Store工作过程

一、序列图二、源码分析2.1 SinkSink阶段所做的事情,就是根据一定的规则,对binlog数据进行一定的过滤。我们之前跟踪过parser过程的代码,发现在parser完成后,会把数据放到一个环形队列TransactionBuffer中,也就是这个方法:transactionBuffer.add(entry);我们具体看下add这个方法。public...

2018-05-25 15:01:13 518

原创 【Canal源码分析】Canal Instance启动和停止

一、序列图1.1 启动1.2 停止二、源码分析2.1 启动这部分代码其实在ServerRunningMonitor的start()方法中。针对不同的destination,启动不同的CanalInstance。主要的方法在于initRunning()。private void initRunning() { if (!isStart())...

2018-05-24 17:52:42 1397 2

原创 【Canal源码分析】Canal Server的启动和停止过程

本文主要解析下canal server的启动过程,希望能有所收获。一、序列图1.1 启动1.2 停止二、源码分析整个server启动的过程比较复杂,看图难以理解,需要辅以文字说明。首先程序的入口在CanalLauncher的main方法中。2.1 加载配置文件String conf = System.getProperty("cana...

2018-05-24 15:27:52 1577

原创 【Canal源码分析】parser工作过程

本文主要分析的部分是instance启动时,parser的一个启动和工作过程。主要关注的是AbstractEventParser的start()方法中的parseThread。一、序列图二、源码分析parseThread中包含的内容比较清晰,代码不是很长,我们逐步分析下。2.1 构造数据库连接erosaConnection = buildErosaConnect...

2018-05-24 10:58:48 1097

原创 【Canal源码分析】Binlog的寻找过程

binlog的寻找过程可能的场景如下:instance第一次启动发生数据库主备切换canal server HA情况下的切换所以这个过程是能够保证binlog不丢失的关键点。本文从源码的角度来分析下启动过程中的binlog寻找过程。一、流程图下图是根据源码画出的流程图,需要结合源码分析来一起看。 二、源码分析入口在AbstractEventParser的s...

2018-05-23 22:15:53 1165

原创 【Otter】otter代码在IDEA远程DEBUG方法

众所周知,Otter的代码打包后,是通过Jetty启动的,Otter代码的启动脚本中自带了开启Jetty远程DEBUG的脚本,所以我们只需要在启动Otter Manager和Otter Node的时候,带上如下参数:sh start.sh debug 8888其中8888就是我们远程debug的端口号。然后在IDEA中开启远程调试,具体的步骤为:Debug->Remote-

2018-02-01 14:05:29 385

原创 【源码】otter工程结构

最近在搞数据同步相关的内容,需要对otter的代码进行扩展,所以需要先熟悉一下otter的源码。首先我们整体来看下otter的工程结构。otter的工程结构比较复杂,需要花费一定的时间来理解各个部分的内容,仅仅通过官方文档无法准确的理解各个模块的内容,现分析如下:otter整体的工程结构如下:otter|--manager |--biz |--deployer

2018-01-22 14:51:58 913

原创 一个Java程序员的2018年展望与2017年总结

回顾2017年,可以说是对我而言有重大转折的一年。我们选择放弃了北京,来到了杭州,开始了新的生活。房子的事情也基本上落实了,虽然其中经历了种种坎坷,但是结局还是美好的,现在在等贷款放贷。中国人嘛,没有属于自己的房子,总觉得没有那种落地生根的感觉,住在出租房里面,总感觉不是那么回事。我们养了一条狗,当然养狗的过程也经历了种种波折,被骗的经历也是很丰富,就当破财消灾了。当然了,爹妈反正是不同意我们养狗的

2018-01-02 09:38:21 7479 4

原创 【源码解析】Sharding-Jdbc模块分析

最新的2.0版本的Sharding-Jdbc版本,由于需要支持动态配置加载,所以最新的模块信息如下:|-sharding-jdbc |-sharding-jdbc-core |-api |-constant |-exception |-executor |-hint |-jdbc

2017-11-20 16:34:34 752

原创 【Kafka源码】KafkaConsumer

一偏移量和消费者位置Offsets And Consumer position1 TopicPartition2 committed position提交偏移量二消费分组和主题订阅Consumer Groups and Topic Subscriptions三检测消费者失败Detecting Consumer Failures三举例1 自动提交Automatic Offset Commi

2017-11-16 13:31:22 515

原创 【Kafka源码】处理请求

一KafkaRequestHandlerPool二KafkaApishandle1 ApiKeys枚举类三Request数据结构1 requestId2 header3 body在KafkaServer中的入口在:apis = new KafkaApis(socketServer.requestChannel, replicaManager, groupCoordinator,

2017-11-15 10:42:59 933

原创 【Kafka源码】broker被选为controller之后的连锁反应

一controller epoch二注册监听器1 registerReassignedPartitionsListener11 initiateReassignReplicasForTopicPartition12 onPartitionReassignment2 registerIsrChangeNotificationListener3 registerPreferredReplic

2017-11-13 16:42:35 2491

原创 【Kafka源码】KafkaController启动过程

一入口二实例化Controller三Controller启动1 registerSessionExpirationListener11 onControllerResignation12 controllerElectorelect2 controllerElectorstartup21 leaderChangeListener22 elect之前聊过了很多Kafka启动过程中的一

2017-11-08 17:31:23 565

原创 【Kafka源码】ReplicaManager启动过程

一入口二ReplicaManager实例化三启动ReplicaManager1 maybeShrinkIsr2 maybePropagateIsrChanges在KafkaServer启动过程的入口中,会启动Replica Manager,众所周知,这是一个副本管理器。replica在Kafka中扮演的角色很重要,是保证消息不丢失的一个重要概念。replica的个人理解概念如下:produ

2017-11-08 11:26:25 429

原创 【Kafka源码】SocketServer启动过程

SocketServer主要用于接收外部的网络请求,并把请求添加到请求队列中。一、入口在KafkaServer.scala中的start方法中,有这样的入口:socketServer = new SocketServer(config, metrics, kafkaMetricsTime)socketServer.startup()这块就是启动了一个SocketServer,我们具体看一下。二、构

2017-11-07 14:16:38 522

原创 【Kafka源码】日志处理

目前来说,kafka的日志中记录的内容比较多,具体的存储内容见这篇博客,写的比较好。可以看到,存储的内容还是比较多的,当存储文件比较大的时候,我们应该如何处理这些日志?下面我们通过kafka启动过程的源码,分析下kafka的日志处理过程。一、入口方法在kafkaServer.scala中的start方法中,有一个这样的调用:/* start log manager */logManager = c

2017-11-06 21:12:10 1184

原创 【Kafka源码】Kafka启动过程

一般来说,我们是通过命令来启动kafka,但是命令的本质还是调用代码中的main方法,所以,我们重点看下启动类Kafka。源码下下来之后,我们也可以通过直接运行Kafka.scala中的main方法(需要指定启动参数,也就是server.properties的位置)来启动Kafka。因为kafka依赖zookeeper,所以我们需要提前启动zookeeper,然后在server.properties

2017-10-23 17:22:49 924

原创 【Kafka源码】Kafka代码模块

Kafka源码依赖于Scala环境,首先需要安装scala,这块请自行百度进行安装。传送门当然,我们要分析源码,需要下载源码,请自行从github上面下载。 说明:本文使用的kafka版本为0.10.0.1,这是目前公司使用的版本。下面说明下kafka源码的工程结构: 下面主要对core目录模块进行说明,这块是kafka的核心。admin:管理员模块,操作和管理topic,parition

2017-10-23 11:18:11 458

原创 【源码】canal和otter的高可靠性分析

一般来说,我们对于数据库最主要的要求就是:数据不丢。不管是主从复制,还是使用类似otter+canal这样的数据库同步方案,我们最基本的需求是,在数据不丢失的前提下,尽可能的保证系统的高可用,也就是在某个节点挂掉,或者数据库发生主从切换等情况下,我们的数据同步系统依然能够发挥它的作用–数据同步。本文讨论的场景是数据库发生主从切换,本文将从源码的角度,来看看otter和canal是如何保证高可用和高可

2017-10-17 15:35:25 882

翻译 【文档】七、Mysql Binlog不同事件类型的事件内容

下面主要讲述了每个类型的事件中的固定和可变部分的数据。Start_log_event_v3/START_EVENT_V3这个事件出现在v1或v3的binlog文件的开头部分。对于4.0和4.1版本的Mysql,这个事件只是被写在服务启动后的第一个binlog文件中,到达一定的条件后,会产生新的日志文件,但是新的日志文件中不包含这个事件。对于所有的Mysql5.0及以上版本,每个日志文件都会以FORM

2017-10-10 08:09:56 361

翻译 【文档】六、Mysql Binlog版本

binlog文件格式有以下几种: - v1:用于3.23版本 - v3:用于4.0.2到4.1版本 - v4:用于5.0及以上版本v2版本只在4.0.x版本中使用,目前已经不再支持了。处理binlog的程序必须支持以上所有的版本。这部分描述了服务器是如何区分所有的格式的,以便辨别binlog使用的版本。mysqlbinlog也是使用的相同的规则。重要的常量: - START_EVENT_V3

2017-10-10 08:09:25 695

翻译 【文档】五、Mysql Binlog事件结构

这个部分描述了事件被写入binlog或者delay log中的属性。所有的事件有相同的整体结构,也就是包含事件头和事件数据:+===================+| event header |+===================+| event data |+===================+具体的内容随着Mysql版本的升级而不同,这导致了binlo

2017-10-09 10:23:00 318

翻译 【文档】四、Mysql Binlog事件含义详解

下面对binlog中事件做个简单说明:UNKNOWN_EVENT这个事件类型应该永远不会出现。它从不会写入binlog中。如果binlog中的事件没法被识别成其他已知事件,他被当做UNKNOWN_EVENT。START_EVENT_V3在binlog文件最开始的符号事件(在Mysql的4.0和4.1版本中,这个事件只会在服务启动时,写到第一个binlog文件中)。这个事件在3.23到4.1版

2017-10-08 15:54:40 581

翻译 【文档】三、Mysql Binlog事件类文件和类型

在内部,服务器使用C++类文件来表示binlog事件。标准在log_event.h文件中,这些类的方法代码在log_event.cc中。log_event是基础类。其他的详细的事件子类都是来源于他。一个事件的二进制序列包含头和数据两部分。类型码在每个事件的头部出现。事件可能的类型码定义在log_event_type枚举类中:enum Log_event_type { UNKNOWN_EVENT

2017-10-08 15:04:52 378

翻译 【文档】二、Binlog结构和内容概述

binlog是一系列文件,这些文件包含了Mysql服务实例中数据的变化。 - binlog包含一系列二进制日志文件,还包含一个索引文件。 - 每个日志文件包含了一个4字节的魔法数,后面跟着描述数据变化的事件内容。 - 魔法数字可以是0xfe 0x62 0x69 0x6e=0xfe ‘b”i”n’(这是在log_event.h中定义的BINLOG_MAGIC常量) - 每个事件

2017-10-08 14:33:29 601 2

翻译 【文档】一、Mysql BinLog概述

Binlog是一系列日志文件,他们包含的内容是Mysql数据内容的改变。如果想开启binlog功能,需要在启动时带上–log-bin参数。binlog是从Mysql3.23.14版本开始的。它包含所有更新数据的sql语句。它还包含可能更新数据的语句(比如,删除不存在的数据行的语句),除非日志的记录是以基于行的。sql语句是以描述修改的事件形式存储的。binlog也包含每个语句的执行时间。binlog

2017-10-08 14:07:16 233

翻译 【Kafka】Consumer配置

从0.9.0.0开始,下面是消费者的配置。 名称 描述 类型 默认值 bootstrap.servers 消费者初始连接kafka集群时的地址列表。不管这边配置的什么地址,消费者会使用所有的kafka集群服务器。消费者会通过这些地址列表,找到所有的kafka集群机器。 list key.deserializer 实现了Deserializer的key的反序列化

2017-08-31 09:59:52 428

翻译 【Kafka】Producer配置

名称 描述 类型 默认值 bootstrap.servers kafka集群地址,ip+端口,以逗号隔开。不管这边配置的是什么服务器,客户端会使用所有的服务器。配置的列表只会影响初始发现所有主机。配置的格式应该是:ip:port,ip:port,因为配置的内容只是用于服务集群的初始发现(集群地址可能会变化),配置可以不包含所有的服务器(你可能需要配置多于一个,防止某个服务挂掉)

2017-08-29 14:08:42 2237

翻译 【Kafka】Broker之Server.properties的重要参数说明

名称 描述 类型 默认值 有效值区间 重要程度 zookeeper.connect zk地址 string 高 advertised.host.name 过时的:只有当advertised.listeners或listeners没有配置的时候才会生效。使用advertised.listeners代替。发布在zk上的hostname,供客户端使用。

2017-08-28 10:49:22 810

转载 【Guava】PreConditions来校验参数

前置条件:让方法调用的前置条件判断更简单。在我们的日常开发中,经常要对入参进行一定的参数校验,比如是否为空,参数的取值范围是否符合要求等等。这种参数校验如果我们单独进行校验的话,代码的重复率比较高,也不是很优雅。Guava提供了一个类PreConditions来统一校验我们的参数,同时可以抛出对应的异常信息,将参数校验的工作进行了统一。下面是它提供的几种校验方法: 方法声明(不包含额外参数)

2017-08-22 09:13:21 536

写给大忙人看的Java SE 8

快速了解Java 8的书籍,里面的内容丰富,包含了Java 8 的所有特性,Java程序员值得一看。

2017-10-18

企业应用架构模式【英文原版】

企业应用架构模式英文版,程序员提升必备书籍,多看看这些经典书籍总是好的。

2017-10-18

Expert one on one J2EE Design and development

系统设计专业书籍,提升程序员设计水平,站在更高的层次看问题。Spring的理论来源!

2017-10-18

【免费】Apache-tomcat-8.5.15

Tomcat免费下载

2017-08-29

空空如也

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

TA关注的人

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