自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

后端进阶

微信公众号「后端进阶」,专注后端技术分享!

原创 图解 Kafka 水印备份机制

高可用是很多分布式系统中必备的特征之一,Kafka 日志的高可用是通过基于 leader-follower 的多副本同步实现的,每个分区下有多个副本,其中只有一个是 leader 副本,提供发送和消费消息,其余都是 follower 副本,不断地发送 fetch 请求给 leader 副本以同步消...

2019-12-27 11:11:56

阅读数 1114

评论数 0

原创 记一次 Kafka 集群线上扩容

前段时间收到某个 Kafka 集群的生产客户端反馈发送消息耗时很高,于是花了一段时间去排查这个问题,最后该集群进行扩容,由于某些主题的当前数据量实在太大,在对这些主题迁移过程中话费了很长一段时间,不过这个过程还算顺利,因为在迁移过程中也做足了各方面的调研,包括分区重平衡过程中对客户端的影响,以及对...

2019-12-19 20:41:44

阅读数 3185

评论数 1

原创 我对支付平台架构设计的一些思考

我在前一家公司的第一个任务是开发统一支付平台,由于公司的业务需求,需要接入多个第三方支付,之前公司的支付都是散落在各个项目中,及其不利于支付的管理,于是聚合三方支付,统一支付平台的任务就落在我手上,可以说是完全从 0 开始设计,经过一翻实战总结,我得出了一些架构设计上的思考,之前就一直很想把自己的...

2019-06-04 08:05:00

阅读数 1642

评论数 3

原创 从源码的角度解析线程池运行原理

在讲解完线程池的构造参数和一些不常用的设置之后,有些同学还是想继续深入地了解线程池的原理,所以这篇文章科代表会带大家深入源码,从底层吃透线程池的运行原理。 ThreadPoolExecutor 在深入源码之前先来看看J.U.C包中的线程池类图: 它们的最顶层是一个Executor接口...

2019-04-25 08:05:00

阅读数 504

评论数 0

原创 RocketMQ消息发送的高可用设计

从rocketmq topic的创建机制可知,一个topic对应有多个消息队列,那么我们在发送消息时,是如何选择消息队列进行发送的?假如这时有broker宕机了,rock...

2019-04-06 09:05:00

阅读数 1730

评论数 0

原创 深度解析RocketMQ Topic的创建机制

我还记得第一次使用rocketmq的时候,需要去控制台预先创建topic,我当时就想为什么要这么设计,于是我决定撸一波源码,带大家从根源上吃透rocketmq topic...

2019-03-31 09:05:00

阅读数 1689

评论数 0

原创 基于Jenkins Pipeline自动化部署

最近在公司推行Docker Swarm集群的过程中,需要用到Jenkins来做自动化部署,Jenkins实现自动化部署有很多种方案,可以直接在jenkins页面写Job,把一些操作和脚本都通过页面设置,也可以在每个项目中直接写Pipeline脚本,但像我那么追求极致的程序员来说,这些方案都打动不了...

2019-02-17 09:33:15

阅读数 808

评论数 0

原创 一次 kafka 消息堆积问题排查

收到某业务组的小伙伴发来的反馈,具体问题如下: 项目中某 kafka 消息组消费特别慢,有时候在 kafka-manager 控制台看到有些消费者已被踢出消费组。 从服务端日志看到如下信息: 该消费组在短时间内重平衡了 600 多次。 从 cat 查看得知,每条消息处理都会有 4 次数据库的交互...

2020-01-07 09:40:05

阅读数 408

评论数 0

原创 Seata 动态配置订阅与降级实现原理

Seata 的动态降级需要结合配置中心的动态配置订阅功能。动态配置订阅,即通过配置中心监听订阅,根据需要读取已更新的缓存值,ZK、Apollo、Nacos 等第三方配置中心都有现成的监听器可实现动态刷新配置;动态降级,即通过动态更新指定配置参数值,使得 Seata 能够在运行过程中动态控制全局事务...

2019-12-22 21:50:29

阅读数 343

评论数 0

原创 关于 Kafka 的一些面试题目

上周客串了一下面试官,在这里就简单记录一下期间我问到的一些关于 Kafka 的面试题目,这些都是我平时在学习 Kafka 的一些总结要点。 谈谈你对 kafka 的整体认识? 问这个问题主要是想知道面试者对 Kafka 的整体认识如何,能够大致了解清楚面试者对 Kafka 的相关概...

2019-12-17 20:33:33

阅读数 355

评论数 0

原创 Seata 配置中心实现原理

Seata 可以支持多个第三方配置中心,那么 Seata 是如何同时兼容那么多个配置中心的呢?下面我给大家详细介绍下 Seata 配置中心的实现原理。 配置中心属性加载 在 Seata 配置中心,有两个默认的配置文件: file.conf 是默认的配置属性,registry.conf 主要存储第...

2019-12-16 20:43:05

阅读数 187

评论数 0

原创 Seata 客户端需要同时启动 TM 和 RM 吗?

在分析启动部分源码时,我发现 GlobalTransactionScanner 会同时启动 RM 和 TM client,但根据 Seata 的设计来看,TM 负责全局事务的操作,如果一个服务中不需要开启全局事务,此时是不需要启动 TM client的,也就是说项目中如果没有全局事务注解,此时是不...

2019-12-14 14:54:36

阅读数 126

评论数 0

原创 Seata AT 模式启动源码分析

从上一篇文章「分布式事务中间件Seata的设计原理」讲了下 Seata AT 模式的一些设计原理,从中也知道了 AT 模式的三个角色(RM、TM、TC),接下来我会更新 Seata 源码分析系列文章。今天就来分析 Seata AT 模式在启动的时候都做了哪些操作。 客户端启动逻辑 TM ...

2019-12-12 19:22:43

阅读数 121

评论数 0

原创 基于 Jenkins Pipeline 自动化部署

最近在公司推行Docker Swarm集群的过程中,需要用到Jenkins来做自动化部署,Jenkins实现自动化部署有很多种方案,可以直接在jenkins页面写Job,把一些操作和脚本都通过页面设置,也可以在每个项目中直接写Pipeline脚本,但像我那么优秀,那么追求极致的程序员来说,这些方案...

2019-11-11 07:09:48

阅读数 240

评论数 0

原创 Dubbo 全链路追踪日志的实现

微服务架构的项目,一次请求可能会调用多个微服务,这样就会产生多个微服务的请求日志,当我们想要查看整个请求链路的日志时,就会变得困难,所幸的是我们有一些集中日志收集工具,比如很热门的ELK,我们需要把这些日志串联起来,这是一个很关键的问题,如果没有串联起来,查询起来很是很困难,我们的做法是在开始请求...

2019-11-07 01:00:32

阅读数 413

评论数 1

原创 关于RocketMQ消息消费与重平衡的一些问题探讨

其实最好的学习方式就是互相交流,最近也有跟网友讨论了一些关于 RocketMQ 消息拉取与重平衡的问题,我姑且在这里写下我的一些总结。 关于 push 模式下的消息循环拉取问题 之前发表了一篇关于重平衡的文章:「Kafka 重平衡机制」,里面有说到 RocketMQ 重平衡机制是每隔 20s...

2019-11-06 20:49:05

阅读数 156

评论数 0

原创 Kafka ISR 副本同步机制

ISR(in-sync replica) 就是 Kafka 为某个分区维护的一组同步集合,即每个分区都有自己的一个 ISR 集合,处于 ISR 集合中的副本,意味着 follower 副本与 leader 副本保持同步状态,只有处于 ISR 集合中的副本才有资格被选举为 leader。一条 Kaf...

2019-11-05 20:43:43

阅读数 437

评论数 0

原创 RocketMQ 位移提交源码分析

向大家提个问题:RocketMQ 消息消费进度是如何提交的,并发消费的时候,一次从 一个队列拉 32 条消息,这 32 条消息会提交到线程池中处理,如果偏移量 m5 比 m4 先执行完成,消息消费后,提交的消费进度是哪个?是提交消息 m5 的偏移量?下面跟着我的节奏,撸一波源码。RocketMQ ...

2019-11-04 08:30:21

阅读数 115

评论数 0

原创 搭建 Redis 主从+哨兵集群

纯粹是为了记录搭建的过程。忘了就翻来看看。下载编译下载:$ wget http://download.redis.io/releases/redis-5.0.3.tar.gz 解压:$ tar -zxvf redis-5.0.3.tar.gz 编译:$ make install PREFIX=/o...

2019-11-04 08:30:21

阅读数 98

评论数 0

原创 搭建 RocketMQ 集群

纯粹是为了记录搭建的过程。忘了就翻来看看。RocketMQ部署类型单个Master单机模式, 即只有一个Broker, 如果Broker宕机了, 会导致RocketMQ服务不可用, 不推荐使用.多Master模式组成一个集群, 集群每个节点都是Master节点, 配置简单, 性能也是最高, 某节点...

2019-11-04 08:30:21

阅读数 104

评论数 0

原创 RocketMQ 同步复制 SLAVE_NOT_AVAILABLE 异常源码分析

最近在 RocketMQ 钉钉官方群中看到有人反馈说 broker 主从部署,在发布消息的时候会报 SLAVE_NOT_AVAILABLE 异常,报这个异常的前提 master 的模式一定为SYNC_MASTER(同步复制),从 异常码可以直接判断的一种原因就是因为 slave 挂掉了,导致 sl...

2019-11-03 09:00:00

阅读数 207

评论数 0

原创 图解:Kafka 水印备份机制

高可用是很多分布式系统中必备的特征之一,Kafka 日志的高可用是通过基于 leader-follower 的多副本同步实现的,每个分区下有多个副本,其中只有一个是 leader 副本,提供发送和消费消息,其余都是 follower 副本,不断地发送 fetch 请求给 leader 副本以同步消...

2019-10-31 08:05:33

阅读数 114

评论数 0

原创 Kafka 分区重分配源码分析

上一篇跟大家描述了 Kafka 集群扩容的方案与过程,这次就跟大家详细描述 Kafka 分区重分配的实现细节。Kafka 为用户提供了分区重分配的执行脚本 kafka-reassign-partitions.sh,脚本内容如下:ReassignPartitionsCommand 类为我们提供了分区...

2019-10-28 08:08:49

阅读数 319

评论数 0

原创 记一次 Kafka 集群线上扩容

前段时间收到某个 Kafka 集群的生产客户端反馈发送消息耗时很高,于是花了一段时间去排查这个问题,最后该集群进行扩容,由于某些主题的当前数据量实在太大,在对这些主题迁移...

2019-10-26 18:44:49

阅读数 485

评论数 0

原创 后端进阶技术交流群

之前有很多网友加我好友,问我有没有一些技术交流群,加上之前文章很多都是解答网友而写的,这也说明互相交流是学习最有效的方法,也应网友的要求,我为公众号开了一个学习交流群,目...

2019-10-26 18:44:49

阅读数 113

评论数 0

原创 关于RocketMQ消息拉取与重平衡的一些问题探讨

其实最好的学习方式就是互相交流,最近也有跟网友讨论了一些关于 RocketMQ 消息拉取与重平衡的问题,我姑且在这里写下我的一些总结。 关于 push 模式下的消息循环拉取问题 之前发表了一篇关于重平衡的文章:「 但是其中有一些是没有详细说的,比如每次拉消息都要等 20s 吗?真的有个网...

2019-10-13 10:00:00

阅读数 119

评论数 0

原创 一个小小的里程碑

过去几天,这个公众号粉丝数量突破 2000 人了,这个数量可能对于一些公众号来说,连零头都不到,但对于我来说,有这么一群小伙伴看我写的技术分享,我就觉得很满足了,你们就是...

2019-10-10 07:45:16

阅读数 102

评论数 0

原创 Kafka重平衡机制

当集群中有新成员加入,或者某些主题增加了分区之后,消费者是怎么进行重新分配分区再进行消费的?这里就涉及到重平衡(Rebalance)的概念,下面我就给大家讲解一下什么是 ...

2019-09-28 09:06:26

阅读数 324

评论数 0

原创 Kafka消息体大小设置的一些细节

还记得前几天有个小伙伴跟我反馈发送消息时提示请求数据过大的异常吗?经过调整 max.request.size 的大小之后,又报了了如下异常:查看相关资料后,发现 Brok...

2019-09-24 18:00:39

阅读数 848

评论数 0

原创 RocketMQ主从如何同步消息消费进度?

PS:清远北江前面我也跟大家讲述了 RocketMQ 读写分离的规则,但是你可能会问,主从服务器之间的消费进度是如何保持同步的?下面我来给大家解答一下。如果消费者消费模...

2019-09-23 08:10:00

阅读数 112

评论数 0

原创 RocketMQ主从读写分离机制

一般来说,选择主从备份实现高可用的架构中,都会具备读写分离机制,比如 MySql 读写分离,客户端可以向主从服务器读取数据,但客户写数据只能通过主服务器。RocketMQ...

2019-09-22 10:58:19

阅读数 254

评论数 0

原创 RocketMQ主从同步源码分析

之前写了一篇关于 RocketMQ 队列与 Kafka 分区副本的区别文章,里面提到了 RocketMQ 的消息冗余主要是通过主备同步机制实现的,这跟 Kafka 分区副...

2019-09-21 17:21:37

阅读数 229

评论数 0

原创 Kafka发送消息时提示请求数据过大是怎么回事?

今天有个小伙伴跟我反馈,在 Kafka 客户端他明明设置了 batch.size 参数,以提高 producer 的吞吐量,但他发现报了如下错误:然后我去服务器查看了下 ...

2019-09-20 21:32:23

阅读数 115

评论数 0

原创 RocketMQ Broker启动流程梳理

Broker 启动的主函数入口:org.apache.rocketmq.broker.BrokerStartup:public static void main(Stri...

2019-09-18 20:23:52

阅读数 136

评论数 0

原创 沪漂

是的,我成为了一名沪漂。因为工作变动,我前几天从广州来到上海工作了,追随心中的梦想与目标。这几天刚好是中秋假期,趁着这个假期,呆在办公室,把 Kafka 搞一搞,因为现在...

2019-09-14 10:08:09

阅读数 627

评论数 2

原创 Kafka分区副本与RocketMQ队列的区别

最近在学习 Kafka,发现其核心概念与 RocketMQ 还是存在一定的差别,下面我来说下 Kafka 分区 与 RocketMQ 队列之间的区别。RocketMQ 队...

2019-09-13 17:26:18

阅读数 212

评论数 0

原创 Golang 内置函数 new 和 make 的区别

Go 语言中 new 和 make 都是内置函数,用于内存的分配,本文主要简述两者使用上的异同与特性。new举个例子:func main() { var i *int ...

2019-08-01 08:05:00

阅读数 140

评论数 0

原创 RocketMQ为什么要保证订阅关系的一致性?

前段时间有个朋友向我提了一个问题,他说在搭建 RocketMQ 集群过程中遇到了关于消费订阅的问题,具体问题如下:然后他发了报错的日志给我看:the consumer's...

2019-07-29 08:03:00

阅读数 728

评论数 0

原创 分布式事务中间件Seata的设计原理

在微服务架构体系下,我们可以按照业务模块分层设计,单独部署,减轻了服务部署压力,也解耦了业务的耦合,避免了应用逐渐变成一个庞然怪物,从而可以轻松扩展,在某些服务出现故障时...

2019-07-10 08:05:00

阅读数 186

评论数 0

原创 Go Modules踩坑总结

在 Java 的项目中,有 Maven 和 Gradle 这些很好用的依赖版本管理工具,简直不要太方便了,但是在 Golang 的项目中,之前的 Golang 官方并没有...

2019-06-27 08:15:00

阅读数 243

评论数 0

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