自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 windows环境搭建canal集群同步binlog到Kafka

一、canal 高可用集群架构原理介绍:canal 模拟mysql slave原理,将自己伪装为slave,同步mysql master binlog。1.Admin负责管理canal 集群配置信息,动态管理所有canal Server 配置信息;管理canal server 上的instance 队列;2.Canal Server 创建Instance实例,同步mysql binlog 队列;3.instacne...

2022-05-01 10:54:43 2416

原创 如何使用Prometheus采集应用自定义指标

前言之前介绍过使用springboot整合Prometheus采集应用自定义指标的方法,但这种方式需要引入actuator。如果有些项目因为安全考虑没有引入actuator或者压根就没有用springboot,那应该如何做呢?下面就来介绍一下。1.引入Prometheus 依赖 compile "io.prometheus:simpleclient_hotspot:0.0.24" compile "io.micrometer:micrometer-registry-prometh

2022-03-12 11:09:12 3233

原创 如何使用spring boot整合Prometheus采集自定义指标

1.springbot 1.5整合Promethus,并自定义指标加入依赖compile "io.prometheus:simpleclient_hotspot:0.0.24"compile "io.micrometer:micrometer-registry-prometheus:1.0.5"compile "io.micrometer:micrometer-spring-legacy:1.0.5"

2022-03-12 10:34:02 3348 1

原创 k8s 调度不均匀问题解决

前言:随着大量的项目上k8s之后,我们通过监控发现有些Node cpu 使用率很高,达到80%+,但有些节点cpu使用率却不到40%。cpu使用率高,cpu负载也同样会升高,这会导致这些Node上的应用出现延迟增加,对影响业务稳定有一定影响。资源利用率严重不均衡,因此一定要解决。我们尝试重新deploy 应用,驱逐pod,发现并不能有效解决问题,pod还会大概率调度到负载高的Node上。问题分析我们知道k8s kube-scheduler调度器会决定将pod 调度到哪个Node,主要由下面两

2022-01-08 12:20:20 7716

原创 一张图告诉你zookeeper 客户端是怎么运行的

从源码角度剖析zookeeper 客户端处理流程,看透zookeeper客户端本质。1.启动流程2.以setData为例子,讲解请求发响应处理流程。

2021-12-31 16:25:36 904

原创 一次生产zookeeper sessionMovedException排查分析

生产问题1.生产zk集群采用5节点3机房 2-2-1架构部署,zookeeper客户端使用的curator框架,网络抖动情况下客户端发生了session moved异常,这个异常只要出现就会不停的报session moved异常,异常信息如下: 16:56:05ERROR [soa_roomviewers_s10_1_175_111_16024_PullJob-Quartz-worker]c.v.s.j.b.AbstractElasticJob- [PullJob] msg=org....

2021-06-07 14:46:28 1178 3

原创 zookeeper是强一致性的吗

前言前端时间面试,面试官问我一个问题,听说你看过zookeeper源码,那你能告诉我zookeeper是不是强一致性的,如果是,又怎么保证数据强一致性的吗? 针对这个问题,我从下面几个角度进行了分析和解答。什么是一致性一致性就是指数据在多个副本节点之间能够保证是一样的,也就是,你在一个副本节点上修改了数据,其他副本节点也会相应的修改数据。接下来再说一下什么是强一致性,强一致性指的是你在一个副本节点修改了数据,那么在其他副本节点都能立刻读到最新修改的数据。zookeeper是强一致性?.

2020-10-07 16:08:44 5063

原创 程序员如何阅读源码

前言阅读源码是有技巧的,不能是走马观花的把所有的源码都读一遍,这样是没什么效果。阅读源码的时候,一定要边读边思考,然后画图理解。下面我们以Kafka源码为例来介绍一下如何阅读:首先用IDEA(Eclipse)开发工具将Kafka源码从github上下载下来,然后通过gradle构建工具下载依赖包; 将源码运行起来,如果出现报错,就从网上搜索一下教程,这个时候一定要有耐心; 简单看一下源码的工程结构,看主要是有哪几个模块组成的,这样要看哪一个功能直接就去那个模块下去找就行了。一般开源框架,都会有c

2020-10-04 17:20:34 409

原创 作为程序员为什么要阅读源码

提升技术能力比如说我们阅读RocketMQ 源码之后,我们就会对消息队列的架构设计思想都有很清楚的了解,然后再去看Kafka 源码的时候,我们就会很容易上手。我们吸收了开源框架的设计思想之后,再应用到我们自己的系统上去,这样我们的系统也会设计的越来越合理。学以致用,我们的技术能力会越来越强。提升竞争力1.当某个技术框架出现生产问题的时候,我们能从源码角度去分析定位问题,然后提出解决方案。这样也会提升竞争力。2.你阅读过某个技术的源码,对这个技术的架构和设计思想都了如指掌。在求职面试的时候,和

2020-10-04 10:11:11 2155 5

原创 聊一聊zookeeper分布式框架和主要功能

前言 zookeeper是一个高可用、高性能的开源的分布式框架,具有保证客户端顺序一致性,原子性,顺序访问等特点。通过zookeeper可以实现发布/订阅,leader选举,分布式锁,分布式协调。元数据管理等功能。基本概念集群角色zookeeper 将集群节点分为三种角色:Leader角色:负责处理读写请求,同步数据Follower节点;Follower角色:参与Leader选举,参与Leader写时的数据同步(过半节点写入),。负责处理读请求,而写请求需要转发给Leader节.

2020-09-26 13:14:46 468

原创 RocketMQ 延迟消息是如何实现的

目录前言一张图带你了解Rocketmq延迟消费原理缺点源码分析延迟消费消息底层实现前言RocketMQ 支持延迟消费消息,可以支持指定延迟时间消费,目前共有18种延迟级别(1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h)。如果我们有定时关单这样的业务需求,就很适合使用RockeMQ延迟队列,这样可以避免自己写繁琐的定时任务代码。一张图带你了解Rocketmq延迟消费原理1.首先生产者发送Topic为C.

2020-09-16 23:09:48 1908

原创 如何实现一个策略模式

策略模式定义:定义一些算法类,分别将他们封装起来,让他们可以互相替换。策略模式可以让算法的变化独立与使用他们的的客户端(调用者)。应用场景:我们有个支付系统,可以支持微信,支付宝,银联,农行等不同支付渠道,由于不同支付渠道处理方式不同,我们会将不同支付渠道分别封装成业务对象,然后根据支付类型选择不同支付对象处理,如下: /** * 根据支付类型选择不同支付方式 * @param payType * @return */ public bo

2020-06-04 10:42:41 481

原创 大白话告诉你RocketMQ集群架构原理

介绍: 要掌握Rocketmq,首先要了解Rocketmq的集群架构原理,了解Rocketmq的组成部分。上图是一个rockemq集群架构图,根据这个图让我们来了解一下Rocketmq集群原理:NameSrv 路由中心集群 负责保存broker topic,ip地址,集群信息,提供路由注册,发现,broker故障剔除等功能。nameSrv集群中所有节点都保存了一样的路由信息,彼此之间互不同通信。Broker集群消息存储和消费:broker集群主要负责存储消息,提供消...

2020-05-10 15:55:08 1030 1

原创 如何实现一个单例模式

单例模式定义:保证一个类只要一个实例,并提供一个访问它的全局访问点。应用场景: 如下图,一般我们都会配置一下配置参数在文件conf.properties中,应用程序线程在运行的时候会先加载解析配置文件,将文件内容保存到数据对象conf.java中。通过这种方式,线程就可以访问配置内容了。这种场景有个很明显的问题,就是每个线程要访问配置文件的时候,都需要创建加载conf.properties配置文件创建conf对象。然而加载文件是个很耗时的过程,创建多个conf对象也浪费系统内存。其实..

2020-05-10 10:52:48 1232

原创 RocketMQ 是如何使用dledger 模式保证故障自动恢复的

前言:在rockemq4.5之前,rocketmq集群架构都是master-slave架构部署,如下图。这里会存在一个问题,假如broker-a master节点挂了,那broker-a就变成了不可用状态。这个时候只有手动去恢复borker-a master节点,才能让broker-a可用。试想一下,我们有个核心业务A,需要向broker-a发送消息,但由于broker-a故障了导致了业务...

2020-04-25 10:02:56 3605 2

原创 RocketMQ 是如何使用事务消息保证发送消息不丢失的

rocketmq 消息队列在大部分业务系统中都会用到,使用方式也很简单,调用producer接口向broker发送消息,创建consumer实例消费broker上的消息。不知道大家有没有想过,broker是可靠的吗,producer发送的消息一定会成功吗,consumer一定会消费到这条消息吗?消息会不会在哪个环节丢失,如果丢失了对业务会没有影响,我们有应该怎么解决。下面就从producer,br...

2020-04-18 17:11:18 1097 1

原创 源码分析kafka是如何发送消息的(一)

介绍: 从这章开始讲kafka生产者,。kafka发送消息的流程和rocketmq有点类似,无非就是创建网络连接,获取kafka集群broker 的ip port地址,topic 信息和分区partition信息,选择一个分区partition然后将消息发送到该分区partition对应的broker上。事实上是不是这样的呢?一条消息是如何从客户端发送到kafka broker上...

2020-04-05 21:52:50 436

原创 kafka源码---源码目录介绍

目录介绍:一.client 包二 core包介绍: 了解kafka项目的目录结构,才能去更好的阅读kafka源码,我觉得我们重点关注其中两个目录下源码就行了,他们分别是client 目录和core目录,client目录下类是java语言开发,实现了消费者和生产者功能,core目录下类是scala语言开发,实现了集群管理,分区副本管理,消息存储和消息获取,网络通...

2020-04-05 20:56:53 896

原创 如何用idea 开发工具搭建运行kafka 源码

介绍: 阅读优秀开源项目源码,学习源码中的一些设计和编程技巧,思考他们的设计目的,有助于我们提升自己技术、代码能力,在工作开发中,完全可以借鉴这些优秀的设计思想去应用到我们自己的业务中:kafka是scala语言开发的项目,和java语言很类似,不需要学习sacla语言基本上都可以读懂,我们可以把kafka当成自己工作中的一个web项目。kafka中大量的用到了jdk并发类,比如集合...

2020-04-05 17:11:12 3959

原创 eureka 注册中心和zookeeper注册中心的区别

一、介绍eureka 和zookeeper(zk) 是我经常接触到的两个常见的注册中心中间件。一般情况,springcloud 项目都会用eureka做为注册中心,kafka用zk做为数据元数据管理和注册中心。二、对比集群结构: zk是leader follower主从结构,leader节点才可以进行写操作,follower负责同步数据和读: ...

2020-04-04 10:04:26 925

原创 springboot学习笔记4( 前后台分离,ajax跨域问题)

使用springboot restful 做前后端分离,跨域访问是比较头疼的问题。再解决跨域问题之前,先了解一下什么是同源,什么是跨源资源共享。    同源就是:请求协议一致,请求域名一致,请求端口。在一个浏览器,只能访问同一域名的资源,在当前域名资源中无法访问其他域名资源。例如: http://www.test.com(目标地址) http://www.test.com:80 (非

2017-09-06 20:39:31 1125

原创 springboot学习笔记3(全局错误页面配置)

前言          在生产中,web程序后台处理异常报错,页面显示异常信息,这对用户来说非常不友好。springboot默认提供了对所有异常处理方法,针对服务客户端,以json格式返回异常信息,响应状态码;对浏览器客户端,响应一个单一的提示页面。springboot也提供了多个我们可选择可配置的异常处理解决方案。下面就简单的介绍一种方式。     1.自定义异常页面

2017-09-06 20:36:17 1532

原创 springboot学习笔记2(拦截器,redis,授权登录,读取yml配置文件)

介绍一下springboot的一些自定义配置。自定义配置前,需要加入一些依赖,在学习笔记1中都要介绍使用springboot自定义拦截器。 首先自己一个拦截器:public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletReques

2017-09-06 20:23:09 4329

原创 springboot 学习笔记1(gradle创建web工程)

springboot 简化配置,对很多常用开源框架做了很好的集成,无需复杂配置即可直接使用。

2017-09-06 20:19:22 2169

原创 springboot学习笔记5(JPA 实现分页、排序、返回map集合)

JPA(Java Persistence API)中文就是java持久层api,是java EE 的一个规范。 springboot 简化配置,对很多常用开源框架做了很好的集成,几乎无需配置即可直接使用,简化开发,提高开发效率。

2017-09-06 20:07:32 23269 3

原创 springboot项目的打包部署(gralde和maven)

前言     不管是maven 构建的项目,还是gralde构建的项目,springboot目录结构都是一致的。公司很多同事用的是maven,但是由于gralde配置上比较简洁,而且性能比maven要快,而且又可以连接maven资源库,因此我更倾向于gralde工具。在项目开发中我都会提供pom.xml和build.gralde两种配置文件,供其他同事选择使用。下面介绍如何使用gralde 和

2017-09-06 10:27:06 1102

空空如也

空空如也

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

TA关注的人

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