自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(258)
  • 资源 (3)
  • 收藏
  • 关注

转载 linux升级mysql

linux升级Mysql

2022-10-20 14:31:28 3184 1

原创 linux升级openssh9

升级openssh9

2022-10-20 13:58:50 1074 1

转载 Elasticsearch:painless script 语法基础和实战

参考:https://www.jianshu.com/p/66a72d7ba3da

2022-05-25 11:51:11 777

原创 Linux挂载新磁盘

1、查看当前的磁盘情况,/dev/vdb未挂载[root@zw-bmfw-app1 /]# fdisk -lDisk /dev/vda: 107.4 GB, 107374182400 bytes, 209715200 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512

2022-03-09 16:02:58 324

原创 解决alibaba-dubbo调用findFirstNonLoopbackHostInfo导致启动慢

dubbo provider在暴露服务时,会执行 DubboServiceMetadataRepository.exportURL ,在这里会调用 inetUtils.findFirstNonLoopbackHostInfo() ,本人开发环境下(win10+jdk8)执行这句代码需要3秒,每暴露一个服务都会调用一次,导致整个启动过程很久。 public void exportURL(URL url) { URL actualURL = url; InetUtils.HostInfo hostIn

2021-12-29 20:53:49 780

原创 Canal解析数据报错:column size is not match for table xxxx 59 vs 57

起因: 本人修改了meta.dat 文件的position,想让canal跳过中间的binlog,直接从最新位置开始同步,改完之后重启canal,接收到的新数据全都报错了问题原因: canal接收到的event解析后有59个字段,但是本地缓存的表结构只有57个字段,导致校验不通过。但是我已经改了position,从最新的数据开始同步,怎么会有字段不一致的情况解决问题: 把meta.dat 的 timestamp 时间戳也改成最新时间即可。canal启动的时候,会根据timestamp时间戳,从数据

2021-12-23 17:14:27 3735

原创 zookeeper可视化工具zkui

安装先到github下载源码:https://github.com/DeemOpen/zkui使用IDEA打开,这边配置文件是根目录下的config.cfg,修改zkServer设置自己的zookeeper地址:zkServer=192.168.1.233:2181zkSessionTimeout=60直接启动运行,默认端口是9090,打开就是登录界面账号:admin密码:manager登录成功后就跳转到可视化界面踩坑记录点击登录卡住,最后抛出 ConnectionLoss 异

2021-12-13 11:00:48 1739

原创 Canal接收、存储、消费binlog过程详解

文章目录获取binlog过程存储binlog过程消费binlog过程获取binlog过程启动线程AbstractEventParser 有个线程对象 parseThread,它的任务就是执行dump所有工作判断从哪里开始dump这里先了解下canal的存储机制:FileMixedMetaManager启动时会从meta.dat加载数据,这里记录了每个Client消费的进度。每当有Client提交Ack,会实时更新内存中的信息,并且每秒同步一次到meta.dat。因此,这里有2种情况:meta

2021-11-21 22:43:38 937

原创 MySQL协议包说明

Packet基本构成Packet不能超过16M(224-1 byte,0xffffff),如果超过了会拆成多个Packet发送Packet头部都必须携带Header信息Packet拆解Header信息由4个字节组成,前3字节代表mysql包长度(payload_length),第4字节表示包序号(sequence_id)从第5个字节开始表示mysql包内容(payload),具体长度由payload_length决定举个例子,Packet用字节数组表示:49 1 0 0 2 50 22

2021-11-21 14:07:58 1210

原创 Canal实时同步数据到RocketMQ

环境准备Canal 1.1.5:https://blog.csdn.net/qq_28834355/article/details/117785317RocketMQ 4.8.0:https://blog.csdn.net/qq_28834355/article/details/113420903修改配置编辑配置文件 conf/canal.properties,修改这几个位置# tcp, kafka, rocketMQ, rabbitMQcanal.serverMode = rocketMQ

2021-11-20 16:49:44 1119

原创 深入理解RocketMQ:Consumer消费消息原理

前言RocketMQ版本:4.8Consumer类型:DefaultMQPushConsumer原理解析consumer 启动时做了哪些事情?定时从NameSrv获取最新的Topic+Queue+Broker路由信息,获取频率默认30秒,可以通过参数 pollNameServerInterval 进行设置创建类型为LinkedBlockingQueue的队列pullRequestQueue,用于存放PullRequest请求对象。创建线程RebalanceService,主要用

2021-11-09 21:45:44 600

原创 RocketMQ源码解析:Producer发送消息+Broker消息存储

文章目录1. Producer 发送消息2. Broker 接收消息1. Producer 发送消息先上一段简单的生产者代码 public static void main(String[] args) throws Exception { DefaultMQProducer producer = new DefaultMQProducer("default_producer"); producer.setNamesrvAddr("127.0.0.1:9876")

2021-11-05 18:02:31 144

原创 RocketMQ源码:Broker启动过程介绍

1. 简介Broker 启动入口是 BrokerStartup.java => main() ,跟上一篇讲的 NameSrv 类似,首先会从启动命令判断 -c 参数,读取自定义配置文件。然后创建 BrokerController 对象,负责初始化和启动操作。Broker 主要配置类有3个:BrokerConfig:Broker相关的配置参数NettyServerConfig:Netty服务端配置,默认端口号10911。NameSrv 也有这个配置,默认端口9876NettyClientCo

2021-11-04 17:59:57 318

原创 RocketMQ源码:NameSrv启动全过程详解

文章目录概述NamesrvController 简介NamesrvController 创建过程NamesrvController 初始化NamesrvController 启动概述NameSrv 的启动入口是 NamesrvStartup.java => main() 方法,其内部维护类型为 NamesrvController 的对象 controller,负责初始化配置,以及启动相关任务。NamesrvController 简介它内部有几个重要属性: private fina

2021-11-03 22:39:57 264

原创 RocketMQ(五):教你如何调试源代码

环境准备代码下载(以4.8.0版本为例):https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.8.0/rocketmq-all-4.8.0-source-release.zip开发工具:IDEAJDK1.8调试NameSrv解压 rocketmq-all-4.8.0-source-release.zip,使用IDEA打开工程找到 namesrv 模块下的类 NamesrvStartup,main 方法就在这里,直接启动会报错 P

2021-11-02 23:19:41 6640

原创 Java线程知识整理汇总

优先级 priority所有线程都有优先级属性 priority,值比较大的会被优先执行priority 最小值是 1,最大值是 10,默认值是 5子线程 priority 的初始值跟父线程的 priority 一致守护线程 daemonJava 线程有2种类型:用户线程和守护线程。用户线程是必需的,而守护线程不一定。当所有用户线程都结束了,程序也就终止了,守护线程会随之被终止。反过来说,如果守护线程都结束了,程序并不一定会结束。设置属性 daemon = true,表示当前线程是守护线

2021-10-24 08:00:00 190

原创 CanalAdapter启动过程分析(源码详解)

1. 概述Canal-Adapter是由阿里开发的SpringBoot项目,可以把它理解成Canal的消费者。他包含了许多子工程,例如 es、hbase、logger、rdb 。这篇文章讲的就是Adapter启动的时候,如何根据配置文件启动对应的消费者Canal版本:1.1.52. 源码解析2.1 启动入口启动工程是 client-adapter 底下的 launcher 子项目,找到 CanalAdapterApplication。这里只有个 main 方法,只是我们调试用而已,没其他重点。

2021-10-19 17:16:56 801

原创 Java线程6个状态详解

文章目录1. 概述2. 举例说明2.1 NEW2.2 RUNNABLE2.3 BLOCKED2.4 WAITING2.5 TIMED_WAITING2.6 TERMINATED1. 概述Java线程状态由 Thread#State 枚举定义,有以下6种:public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED;}NEW:初始状态,线程创建后还没开始运行RUNNABLE:运行状态,包

2021-10-18 22:00:01 194

原创 Canal Adapter二次开发,实现MySQL实时同步到Redis

文章目录前言准备工作Adapter(redis)开发前言众所周知,通过 Canal 可以取到 MySQL Master 节点的 Binlog 日志,并且使用它提供的几种 Client-Adapter,就能选择将数据同步到 Elasticsearch、MySQL(Slave)、Kafka、HBase,唯独缺少了我们最经常使用的 Redis。本篇文章,就是教你如何对 Adapter 组件进行扩展,实现 MySQL -> Redis 的数据传递。版本:Canal-1.1.5JDK环境:1.8安装

2021-10-16 16:25:05 648

原创 Canal全方位深入讲解,看这一篇就够了

文章目录1. 概述2. Canal的组成3. Server解析3.1 EventParser3.2 EventSink3.3 EventStore3.4 MetaManager4. Client解析1. 概述Canal是阿里巴巴开发的一项开源组件,通过将自己伪装成MySQL Slave节点来接收Master节点的Binlog日志,然后就可以实现我们的需求,例如:同步到MySQL从库、同步到Elasticsearch、同步到Kafka 等等。2. Canal的组成Canal主要分成 Server(服

2021-10-14 22:38:30 534

原创 MySQL show binlog events命令查看binlog日志内容

格式:show binlog events [IN ‘log_name’] [FROM pos] [LIMIT offset, count]log_name:指定某个binlog文件名。也可以不指定,默认查询第1个binlogpos:指定开始查询的位置,pos参数值必须是某条binlog记录开始或结束的位置,否则会报错offset、count:MySQL分页参数,跟常规select查询设置的limit一样例子:先查看当前binlog记录到哪里了:show master status;.

2021-10-13 14:10:06 5896

原创 canal应用四:canal-adapter的使用

文章目录前言适配器结构适配器配置说明总配置文件 application.yml使用远程配置(MySQL)适配器启动前言前面的文章,我们都是通过编写Java程序来实现Client消费。Canal 提供了几种适配器,允许我们通过一定的配置实现消费数据并同步到其他存储介质。目前支持功能:日志适配器关系型数据库的数据同步(表对表同步), ETL功能HBase的数据同步(表对表同步), ETL功能Elasticsearch的数据同步,ETL功能适配器结构client-adapter分为适配器和启动

2021-10-12 16:13:29 2419

原创 canal应用三:启动多个Instance实例

文章目录前言2个Instance监听不同的库2个Instance监听相同的库前言Canal通过 canal.destinations 来配置对应的 Instance 实例,这里允许配置多个Instance,中间用逗号分开即可。2个Instance监听不同的库修改 canal.properties 文件,找到 canal.destinations 把他修改成 example1,example2canal.destinations = example1,example2在 conf 目录下

2021-10-12 15:31:21 2349

原创 Netty原理五:ChannelFuture、DefaultChannelPromise对象解析

文章目录1. 前言2. 原理解析2.1 ChannelFuture 调用 sync() 的作用2.2 Channel 调用的 closeFuture() 是什么1. 前言学习Netty的时候,大家肯定都会看到这么几句代码: //启动服务端监听 ChannelFuture future = serverBootstrap.bind(7000).sync(); //关闭? future.channel().closeFuture().sync();问

2021-10-07 17:08:39 409

原创 Netty原理四:客户端Bootstrap启动连接时做了些什么?

文章目录前言原理解析前言先来看一段很普通的客户端程序,定义 NioEventLoopGroup,然后通过 Bootstrap 去连接Server。 public static void main(String[] args) throws Exception { //线程组 NioEventLoopGroup group = new NioEventLoopGroup(); //启动配置 Bootstrap bootstrap =

2021-10-06 17:14:04 190 1

原创 Netty原理三:NioEventLoop如何处理客户端连接

文章目录前言原理解析总结前言Netty服务端存在类型为 NioEventLoopGroup 的 Boss 和 Worker,Boss 接收到客户端连接后,将客户端 Channel 注册到 Worker,如下图所示:原理解析在 NioEventLoop.java 找到 processSelectedKey 方法,每次有客户端连接时,都会触发该方法 private void processSelectedKey(SelectionKey k, AbstractNioChannel ch) {

2021-10-02 19:22:59 222

原创 Netty原理二:NioEventLoop 如何启动监听事件

前言在NIO编程中,Server 通常会写一个无限循环的代码,Selector 持续监听新的事件: //NIO System.out.println("等待连接...."); while (true){ selector.select(); //处理 selector.selectedKeys 事件 }但是Netty程序只需要启动 ServerBootstrap,然后就开启监听事件了,那它是如何处理的?

2021-10-02 17:03:24 277

原创 Netty原理一:ServerBootstrap启动过程全解析

所有的Netty服务端程序,我们都会执行 ServerBootstrap.bind(),它的内部会调用 initAndRegister() 方法,在 AbstractBootstrap.java 找到这段代码:注意:为了方便阅读,本篇的源码部分只保留核心部分,比较方便阅读,无关紧要的会删掉,看完整源码需要自己打开IDEA哈 final ChannelFuture initAndRegister() { //1.创建 NioServerSocketChannel Chann

2021-10-01 21:59:42 501

原创 MinIO安装和基本使用

文章目录简介安装(Docker)Java API简介MinIO是一款高性能的对象存储容器,适合存储大量的非结构化数据,例如:图片、视频、Word等文件。安装(Docker)拉取镜像docker pull minio/minio创建并运行容器docker run -it --name minio -p 9000:9000 -p 9001:9001 -d \-v /usr/local/docker/minio/data:/data \-v /usr/local/docker/mini

2021-09-26 15:33:03 3064 5

原创 Java DelayQueue延迟队列的使用和源码分析

概述

2021-09-20 22:09:53 168

原创 Java PriorityQueue优先队列详解(源码+图文步骤解析)

概述PriorityQueue 称为优先队列,也是一种特殊的有序队列。为什么特殊呢?因为其内部使用 Object[] 数组来存储数据,整个数组从0 ~ 最后一个并不是有序排放的,但是出队的时候数据又是从小到大有序的。...

2021-09-15 21:59:16 310

原创 问题排查:vue项目刷新页面加载了500多个请求?

问题背景某项目上线后,打开登录页加载了500多个请求,包含了js、css、png等等。因为项目部署在第三方云平台,直接被当做恶意攻击,把IP封掉了如下图:问题分析Webpack 内置了 prefetch 预加载插件,会告诉浏览器在页面加载完成后,利用空闲时间加载用户未来可能用到的内容。只要关闭 prefetch 插件,就能实现只加载当前页面用到的脚本。解决方案在 vue.config.js 添加这行代码: chainWebpack: config => { co

2021-09-08 11:28:10 1260 2

原创 问题排查:单表3000笔数据查询竟然要2秒?

前言事情是这样的:线上环境有个单表,数据才3000多笔,每次按条件过滤都要2秒左右,简直无法理解。抱着好奇心,我决定研究一下到底是什么情况。索引分析explain select * from **** ,发现并没有走索引。将索引加上之后,速度从2秒变成0.1秒不到。但是呢,正常情况下3000笔数据就算不走索引,查询也应该是毫秒级响应,所以继续排查其他原因表结构分析查看该表的字段,发现有个 LongText 类型的字段 props,存储了大量JSON数据和BASE64的图片(不要问我为什么这样存

2021-09-03 17:05:11 548

原创 Linux使用vsftpd搭建FTP服务

安装vsftpd软件yum install -y vsftpd启动服务启动:service vsftpd start停止:service vsftpd stop重启:service vsftpd restart用户访问首先,创建个目录用来存放 ftp 上传的文件,这里以 /ftp/lycase/ 为例然后,创建 ftpuser 用户,只有上传权限,没有登录服务器权限:useradd ftpuser -d /ftp/lycase/ -s /sbin/nologin授权:c

2021-08-24 16:12:01 245

原创 canal应用二:mysql数据实时同步到redis

前言在项目开发中,通常使用redis作为数据的缓存,那么经常遇到一个问题,修改MySQL的数据要怎么同步到Redis呢?方式一:在系统的保存、删除接口同时对redis进行操作,但是存在一个缺点,就是如果直接修改数据库的情况下无法同步数据;方式二:使用canal拉取mysql binlog,获取mysql变化的数据日志,然后同步操作redis。这里我们采用方式二,基本设计思路如下图所示准备工作安装canal-server、canal-admin:canal安装和基本使用安装mysql、r

2021-06-18 16:03:38 1207 4

原创 Java 常见的OOM类型总结

文章目录StackOverflowErrorJava heap spaceGC overhead limit exceededMetaspaceStackOverflowError说明:栈空间溢出举例:递归无限调用,不设置结束点,会导致栈空间爆满 public static void stackOverflowError(){ stackOverflowError(); }Java heap space说明:堆空间溢出举例:设置最大堆空间10m,然后创建一个2

2021-06-18 08:56:00 533 6

原创 canal应用一:基于mysql binlog的日志解析工具

文章目录前言mysql 配置canal 下载安装canal client前言canal 是阿里巴巴开发的MySQL数据实时同步工具,基于binlog增量日志解析,提供了增量数据订阅和消费功能。canal 允许将订阅到的 mysql 增量日志,同步到 mysql、kafka、elasticsearch 等等mysql 配置对于自建 MySQL , 需要先开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式,my.cnf 中配置如下[mysqld]log-bin=

2021-06-10 17:25:04 1285

原创 MAT分析器查看jvm dump文件

创建dump文件方式一:使用 jmap 命令创建,例如 jmap -dump:format=b,file=heapdump.hprof 27012(进程ID)方式二:运行java程序的时候开启HeapDumpOnOutOfMemoryError参数(发生OOM的时候自动创建dump),例如 java -Xms10m -Xmx10m -XX:+HeapDumpOnOutOfMemoryError HelloWorld分析dump文件MAT工具下载地址:https://www.eclipse.org

2021-05-13 20:53:37 1706 1

原创 Java jmap查看堆内存

https://zhanghan.blog.csdn.net/article/details/109255980

2021-05-13 16:58:42 1243

原创 Java强引用、软引用、弱引用、虚引用的区别

文章目录强引用软引用弱引用虚引用总结强引用只要对象的引用仍然存在,就永远不会被GC回收,即便JVM内存不够用了也不回收。 public static void strongReference(){ Object a = new Object(); System.out.println("回收前:" + a); System.gc(); System.out.println("回收后:" + a); }输出结果如下:

2021-05-13 10:33:04 244 1

jodconverter-2.2.2.zip

jodconverter-2.2.2.zip

2021-01-26

jdk1.8中文版文档

JDK1.8中文版本

2020-10-21

spring boot操作kafka例子

spring boot操作kafka例子 创建主题、生产者、消费者 发送消息、消费消息 application.properties配置

2020-10-21

空空如也

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

TA关注的人

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