自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 资源 (4)
  • 收藏
  • 关注

原创 CMS几种GC模式解读

在G1出来之前,CMS绝对是OLTP系统的标配。即使G1出来几年了,生产环境很多的JVM实例还是采用ParNew+CMS的组合。但是即使其得到这么广泛的应用,还是有很多同学对它有很深的误解。本文主要对ParNew+CMS经典组合下,触发的几种垃圾回收方式进行几个概念的纠正。Backgroud CMS可能更多人只知道CMS,而不知道Backgroud CMS。事实上我们说的CMS,即包含了5个阶...

2019-05-01 11:40:12 2185

原创 Don’t Cross 32 GB!

看elasticsearch官方文档时,提到的一个观点:Don’t Cross 32 GB。是因为当JVM堆少于32G时,HotSpot虚拟机会启用一个压缩对象指针。而如果超过32G,这个压缩对象指针就会失效。那么,究竟这个临界值的精确值是多大呢?开启压缩指针相比没有开启,能节省多少内存呢?让我们一探究竟!Don’t Cross 32 GB!在Java的世界里,绝大部分对象分配在堆里,并且被一...

2019-04-26 23:19:29 461

原创 剖析G1(Garbage First)

欢迎关注笔者的公众号:【阿飞的博客】,首发都在这里!!!Java从JDK7U9开始支持G1(正式发布),所以,如果要使用G1的话,你的Java版本应该是JDK7U9或者更新的版本。不过,强烈建议JDK8才使用G1,而且最好是JDK8的最新版本,因为在JDK7~JDK8最新版本迭代过程中,Java针对G1垃圾回收期做了大量的优化工作。G1垃圾回收器是为多处理器和大内存的服务器而设计的,它根据...

2019-04-20 08:17:47 1422

原创 11. kafka重试机制解读

前面对kafka的学习中已经了解到KafkaProducer通过设定参数retries,如果发送消息到broker时抛出异常,且是允许重试的异常,那么就会最大重试retries参数指定的次数。本片文章主要分析几个问题: - 哪些异常可以重试 - 如何实现重试接下来通过分析一一解开这些问题的答案。1.哪些异常可以重试org.apache.kafka.clients.produ...

2018-07-25 17:15:09 24941 6

原创 10. kafka消费者如何分配分区

消费者如何分配分区就是指某个topic,其N个分区和消费该topic的若干消费者群组下M个消费者的关系。如下图所示,C0和C1两个消费者如何分配N个分区: 核心接口:org.apache.kafka.clients.consumer.internals.PartitionAssignor内置策略:org.apache.kafka.clients.consumer.RangeAssigno...

2018-07-18 14:09:26 17169 5

原创 9. kafka shell脚本用法详解

kafka安装目录下的bin目录包含了很多运维可操作的shell脚本,列举如下: 脚本名称 用途描述 connect-distributed.sh 连接kafka集群模式 connect-standalone.sh 连接kafka单机模式 kafka-acls.sh todo kafka-broker-api-versions.sh ...

2018-07-14 21:18:51 15137 5

原创 8. kafka分区

分区策略构造KafkaProducer代码如下:Properties props = new Properties();props.put("bootstrap.servers", "10.0.55.229:9092");props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializ...

2018-07-10 18:13:52 323

原创 7. kafka序列化&反序列化

序列化kafka序列化消息是在生产端,序列化后,消息才能网络传输。而构造KafkaProducer代码如下:Properties props = new Properties();props.put("bootstrap.servers", "10.0.55.229:9092");props.put("key.serializer", "org.apache.kafka.commo...

2018-07-04 19:49:07 10271

原创 6. kafka拦截器

拦截器定义 拦截器参数命名为:interceptor.classes。官方文档解析如下: A list of classes to use as interceptors. Implementing the org.apache.kafka.clients.producer.ProducerInterceptor interface allows you to intercept ...

2018-07-03 14:08:44 1047

原创 5. ActiveMQ平滑迁移到kafka

直入主题,不讨论为什么迁移,直接谈迁移方案。既然是从AMQ(AtiveMQ的简称)迁移到kafka,那么迁移过程中肯定需要做到平滑迁移:对于业务没有影响,对于上下游系统没有依赖。由于系统一般会和多个上游,多个下游通过MQ中间件保持依赖关系,迁移的过程中,肯定要做到各个系统上线没有任何依赖。打个比方订单系统发送topic,会员系统和积分系统都会接收这个topic(会员增加成长值,积分系统加积...

2018-06-30 21:10:38 1254

原创 4. kafka生产者&消费者

原生方式无论是生产者还是消费者,引入的依赖都是kafka-clients,maven坐标如下:<dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>1....

2018-06-28 18:19:47 1242

原创 3. kafka开启JMX

开启JMXkafka开启JMX的2种方式: 1. 启动kafka时增加JMX_PORT=9988,即JMX_PORT=9988 bin/kafka-server-start.sh -daemon config/server.properties 2. 修改kafka-run-class.sh脚本,第一行增加JMX_PORT=9988即可。事实上这两种配置方式背后的原理是一样的,我们看...

2018-06-25 23:00:08 23763 5

原创 2. kafka安装

这篇文章主要讲解kafka单机安装,以及集群安装。kafka的单机安装非常简单,只需按照下一段落提到的几步操作即可。单机安装下载 首先从官方下载安装包,官方地址:http://kafka.apache.org/downloads。kafka安装包和一般安装包的命名方式不一样,我们看一个kafka包命名:kafka_2.11-1.1.0.tgz,其中2.11是scala的版本,1.1...

2018-06-23 10:35:08 519

原创 1. kafka是什么

定义一千个人眼里有一千个哈姆雷特。如果说谁最有资格定义kafka是什么,那么肯定是官方文档:Apache Kafka® is a distributed streaming platform.官方还对流平台进行了定义–流平台有三大关键能力(A streaming platform has three key capabilities): - Publish and subscri...

2018-06-21 23:01:36 748

原创 24. sharding-jdbc源码之orchestration实现

阿飞Javaer,转载请注明原创出处,谢谢!源码图解根据源码图解可知,sharding-jdbc-orchestration模块中创建数据源有两种方式:工厂类和spring;且有两种数据源类型:OrchestrationShardingDataSource和OrchestrationMasterSlaveDataSource; - 左边是OrchestrationShar...

2018-06-07 20:44:56 1170 1

原创 23. sharding-jdbc源码之orchestration简介&使用

阿飞Javaer,转载请注明原创出处,谢谢!sharding-jdbc2.x核心功能之一就是orchestration,即编排治理,什么意思呢?官方文档介绍–2.0.0.M1版本开始,sharding-jdbc提供了数据库治理功能,主要包括: - 配置集中化与动态化。可支持数据源、表与分片及读写分离策略的动态切换; - 数据治理。提供熔断数据库访问程序对数据库的访问和禁用从库的访问...

2018-06-05 13:42:18 3911

原创 22-2.sharding-jdbc源码之DELETE解析

阿飞Javaer,转载请注明原创出处,谢谢!!DELETE语法分析delete解析之前,首先看一下mysql官方对delete语法的定义: - Single-Table SyntaxDELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [PARTITION (partition_name [, partiti...

2018-06-01 16:51:54 1675

原创 22-1.sharding-jdbc源码之INSERT解析

阿飞Javaer,转载请注明原创出处,谢谢!!INSERT语法分析insert解析之前,首先看一下mysql官方对insert语法的定义,因为SQL解析跟语法息息相关:INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [PARTITION (partition...

2018-06-01 16:51:03 2569

原创 21.sharding-jdbc源码之SQL解析-词法分析

阿飞Javaer,转载请注明原创出处,谢谢!!sharding-jdbc对SQL解析的源码主要在下图所示parsing模块中,由下图可知SQL解析主要分为两部分:lexer和parser。lexer就是本文需要分析的词法分析: 分析sharding-jdbc源码的词法分析之前,先大概说一下词法分析是干嘛的,后面理解起来就会更容易,例如对于SQL:“/! hello, afei /...

2018-05-30 21:01:57 1112

原创 20.sharding-jdbc2.0.3集成--基于ssm

阿飞Javaer,转载请注明原创出处,谢谢!本篇文章讲解如何在ssm(spring、springmvc、mybatis)结构的程序上集成sharding-jdbc(版本为2.0.3)进行分库分表; 假设分库分表行为如下: - 将auth_user表分到4个库(user_0~user_3)中; - 其他表不进行分库分表,保留在default_db库中;1. POM配置以...

2018-05-28 14:04:16 1801 4

原创 18. sharding-jdbc源码之复杂路由实现

阿飞Javaer,转载请注明原创出处,谢谢!!路由条件ParsingSQLRouter.java中决定是简单路由还是复杂路由的条件如下;private RoutingResult route(final List<Object> parameters, final SQLStatement sqlStatement) { Collection<...

2018-05-25 17:52:47 724

原创 17. SQL重写为limit Integer.MAX_VALUE的无奈

阿飞Javaer,转载请注明原创出处,谢谢!!这篇文章源于sharding-jdbc源码分析之重写的遗留问题,相关sharding-jdbc源码如下:private void appendLimitRowCount(final SQLBuilder sqlBuilder, final RowCountToken rowCountToken, final int count, f...

2018-05-23 11:54:26 2974

原创 16. sharding-jdbc源码分析之重写

阿飞Javaer,转载请注明原创出处,谢谢!!核心源码就在sharding-jdbc-core模块的com.dangdang.ddframe.rdb.sharding.rewrite目录下,包含两个文件SQLBuilder和SQLRewriteEngine;测试用例入口为SQLRewriteEngineTest,下面从SQLRewriteEngineTest中debug源码分析shar...

2018-05-22 12:27:37 694

原创 代码量统计工具源码

源码说明: - VALID_SUFFIX_SET可定制,默认只统计.java源码; - EXCLUDE_DIRECTORY_SET可定制,默认过滤路径包含src/test或者target目录; - main()方法中projectNameList包含要统计源码工程名集合,可定制;默认统计C:\ProjectCode目录下指定工程源码,可定制。package com.afei.util...

2018-05-21 15:29:20 1506

原创 dubbo源码分析--预热warmup过程

阿飞Javaer,转载请注明原创出处,谢谢!前言今天群里小伙伴黄晓峰VIVO咨询一个问题:”dubbo接口怎么做预热呢,每次上线,都会有一小部分超时?”,熟悉JVM都知道,JVM重启后有一段预热过程,要运行一段时间,它的性能才能达到最佳状态;阿里JVM团队就针对这个缺陷进行了优化,其特性名曰:jwarmup,可以点击Alibaba JVM创新提效 获国际社区认可登台JVM圈顶会...

2018-05-18 09:34:43 3872

原创 15. sharding-jdbc源码之EventBus-轻量级进程内事件分发组件

阿飞Javaer,转载请注明原创出处,谢谢!EventBus来自于google-guava包中。源码注释如下:Dispatches events to listeners, and provides ways for listeners to register themselves.The EventBus allows publish-subscribe-style com...

2018-05-16 12:08:25 389

原创 14. sharding-jdbc源码之异常处理

阿飞Javaer,转载请注明原创出处,谢谢!一般项目都会有自己的一套异常处理方式,sharding-jdbc也不以外,sharding-jdbc源码处理异常的方式主要有下面2种方式: 1. Preconditions 2. 自定义异常1. Preconditionsgoogle-guava的Preconditions用于条件检查,不符合预期的话则抛出异常,并可以重写异常...

2018-05-14 09:18:16 4009

原创 13. sharding-jdbc源码之读写分离

阿飞Javaer,转载请注明原创出处,谢谢!读写分离支持项提供了一主多从的读写分离配置,可独立使用,也可配合分库分表使用。同一线程且同一数据库连接内,如有写入操作,以后的读操作均从主库读取,用于保证数据一致性。Spring命名空间。基于Hint的强制主库路由。读写分离不支持范围 主库和从库的数据同步。主库和从库的数据同步延迟导致的数据不一致。主库双写...

2018-05-12 11:12:45 1296

原创 12. sharding-jdbc源码之强制路由

阿飞Javaer,转载请注明原创出处,谢谢!!源码分析位于sharding-jdbc-core模块下的包com.dangdang.ddframe.rdb.sharding.hint中,核心类HintManagerHolder的部分源码如下:/** * Hint manager holder. * <p>Use thread-local to manage...

2018-05-10 09:16:36 6531

原创 11. sharding-jdbc集成--基于ssm

阿飞Javaer,转载请注明原创出处,谢谢!本篇文章讲解如何在ssm(spring、springmvc、mybatis)架构的程序上集成sharding-jdbc(版本为1.5.4.1)进行分库分表; 假设分库分表行为如下: - 将auth_user表分到4个库(user_0~user_3)中; - 其他表不进行分库分表,保留在default_db库中;1. POM配置以...

2018-05-09 12:01:22 1457

原创 10. sharding-jdbc源码之异步送达JOB

阿飞Javaer,转载请注明原创出处,谢谢!最大努力送达型异步JOB任务当最大努力送达型监听器多次失败尝试后,把任务交给最大努力送达型异步JOB任务处理,异步多次尝试处理;核心源码在模块sharding-jdbc-transaction-async-job中。该模块是一个独立异步处理模块,使用者决定是否需要启用,源码比较少,大概看一下源码结构: resouces目录...

2018-05-08 11:47:52 334

原创 9. sharding-jdbc源码之最大努力型事务

阿飞Javaer,转载请注明原创出处,谢谢!BASE TransactionBest efforts delivery transaction (已经实现).Try confirm cancel transaction (待定). Sharding-JDBC由于性能方面的考量,决定不支持强一致性分布式事务。最大努力送达型事务在分布式数据库的场景下,相...

2018-05-08 11:47:22 1307 2

原创 8. sharding-jdbc源码之结果合并总结

阿飞Javaer,转载请注明原创出处,谢谢!分页性能分析性能瓶颈查询偏移量过大的分页会导致数据库获取数据性能低下,以MySQL为例:SELECT * FROM t_order ORDER BY id LIMIT 1000000, 10这句SQL会使得MySQL在无法利用索引的情况下跳过1000000条记录后,再获取10条记录,其性能可想而知。而在分库分表的情...

2018-05-08 11:46:46 1119

原创 7. sharding-jdbc源码之group by结果合并(2)

阿飞Javaer,转载请注明原创出处,谢谢!在sharding-jdbc源码之group by结果合并(1)中主要分析了sharding-jdbc如何在GroupByStreamResultSetMerger和GroupByMemoryResultSetMerger中选择,并分析了GroupByStreamResultSetMerger的实现;接下来分析GroupByMemoryRes...

2018-05-08 11:45:58 1281

原创 6. sharding-jdbc源码之group by结果合并(1)

阿飞Javaer,转载请注明原创出处,谢谢!在5. sharding-jdbc源码之结果合并中已经分析了OrderByStreamResultSetMerger、LimitDecoratorResultSetMerger、IteratorStreamResultSetMerger,查看源码目录下ResultSetMerger的实现类,只剩下GroupByMemoryResultSetM...

2018-05-08 11:44:25 1494

原创 5. sharding-jdbc源码之结果合并

阿飞Javaer,转载请注明原创出处,谢谢!单表查询之结果合并接下来以执行SELECT o.* FROM t_order o where o.user_id=10 order by o.order_id desc limit 2,3分析下面这段Java代码是如何对结果进行合并的:result = new ShardingResultSet(resultSets, new M...

2018-05-08 11:43:17 759

原创 4. sharding-jdbc源码之分布式ID

阿飞Javaer,转载请注明原创出处,谢谢!实现动机传统数据库软件开发中,主键自动生成技术是基本需求。而各大数据库对于该需求也提供了相应的支持,比如MySQL的自增键。 对于MySQL而言,分库分表之后,不同表生成全局唯一的Id是非常棘手的问题。因为同一个逻辑表内的不同实际表之间的自增键是无法互相感知的, 这样会造成重复Id的生成。我们当然可以通过约束表生成键的规则来达到数据的不重...

2018-05-08 11:31:17 2596

原创 3-1. sharding-jdbc源码之复杂路由实现

阿飞Javaer,转载请注明原创出处,谢谢!路由条件ParsingSQLRouter.java中决定是简单路由还是复杂路由的条件如下;private RoutingResult route(final List<Object> parameters, final SQLStatement sqlStatement) { Collection<Str...

2018-05-08 11:24:17 1031

原创 3. sharding-jdbc源码之路由&执行

阿飞Javaer,转载请注明原创出处,谢谢!继续以sharding-jdbc-example-jdbc模块中的com.dangdang.ddframe.rdb.sharding.example.jdbc.Main为基础,剖析分库分表简单查询SQL实现–printSimpleSelect(dataSource);,即如何执行简单的查询SQL,接下来的分析以执行SQL语句"SELECT o...

2018-05-07 10:02:59 1006 1

原创 2. sharding-jdbc源码之Configuration

阿飞Javaer,转载请注明原创出处,谢谢!上篇文章sharding-jdbc源码之数据源介绍了通过Java硬编码创建ShardingDataSource。这篇文章通过分析sharding-jdbc-config-parent模块,学习如何通过YAML配置或者spring配置创建ShardingDataSource;sharding-jdbc-config-parent模块包含了三个子...

2018-05-04 16:38:34 1544 1

openjdk1.8.0

openjdk1.8.0源码,包括JVM源码,另外,移除了jaxws,jaxp以及corba模块。对想看JVM实现的同学毫无影响

2018-11-01

dubbo-hessian-lite

dubbo源码编译时依赖的hessian-lite,由于阿里对部分链接的屏蔽无法解决这个依赖,所以需要用户先下载然后mvn install到本地来解决依赖问题

2017-11-04

opensesame

dubbo源码编译时依赖的opensesame,由于阿里对部分链接的屏蔽无法解决这个依赖,所以需要用户先下载然后mvn install到本地来解决依赖问题

2017-11-03

hessian-lite

dubbo依赖的hessian-lite,版本号是3.2.1-fixed-2,通过下载该源码后,mvn install到本地,解决dubbo源码编译时依赖的hessian-lite的问题

2017-09-19

空空如也

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

TA关注的人

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