自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 flink sql gateway初探

flink 1.16版本中发布了一个新功能–SQL gateway,本篇文章就来实践测试下该功能。

2022-12-07 17:45:44 1284 1

原创 Flink CDC入门实践--基于 Flink CDC 构建 MySQL 和 Postgres 的 Streaming ETL

最近在学习Flink CDC相关的知识,作为小白就从官方的教学示例开始动手,本篇文章分享的是官方教程实践–基于 Flink CDC 构建 MySQL 和 Postgres 的 Streaming ETL。

2022-12-06 20:38:24 2068 1

原创 producer发送消息的tps较低时rocketmq_client_consumer_pull_rt的值较高原因分析

最近在本地做了一个测试发现,当producer端每分钟发送一条数据时,consumer端正常消费的情况下rocketmq-client-consumer-pull-rt指标的值却很高,本篇文章就来分析下原因。

2022-10-03 17:11:20 988

原创 RocketMQ关于指标数据的总结

在RocketMQ中有很多关于指标数据统计的实现,本篇文章就来总结下其实现的方式以及都统计了哪些数据。

2022-09-02 14:59:36 2683

原创 RocketMQ主从模式下slave文件系统readonly时,producer端catch RemotingTooMuchRequestException

问题描述:1.RocketMQ集群(V4.9.1)部署方式为一主一从,并且是同步刷盘同步复制2.当slave节点的文件系统readonly时,在master节点上执行benchmark下的producer直到Send TPS为0,此时以下程序再往集群中同步发送数据producer端在等待设置的超时时间(超时时间设置从秒级到分钟级)后catch RemotingTooMuchRequestException

2022-05-26 15:45:05 187

原创 RocketMQ HA模式master节点文件系统readonly后的一些问题

最近身边有个朋友问出RocketMQ HA模式master节点文件系统readonly产生的一些问题,所以这里从源码角度分析下master节点文件系统readonly分别对broker端存储消息、HA主从同步以及对客户端的影响(源码版本是4.9.1,测试环境中配置的是同步刷盘同步复制)。

2022-05-12 15:59:41 375

原创 k8s operator实践总结

文章目录前言一、开发流程步骤二、开发总结前段时间接触了k8s operator开发,在开发的过程中碰到了很多问题,现将开发过程中碰到的问题及经验进行总结。

2022-05-11 15:53:15 2190

原创 记一次client-go接口使用问题:动态修改PVC的存储大小

  在k8s集群中如何通过client-go的接口来动态修改PVC的存储大小呢?笔者开始时调用了其update接口,但是发现日志中会出现错误信息:PVC的spec是不可修改的;后面将接口换成patch,但是在调用patch接口时需要指定PatchType,PatchType分为四种:JSONPatchType、MergePatchType、StrategicMergePatchType和ApplyPatchType。MergePatchType和StrategicMergePatchType对于修改PVC的

2021-12-03 16:32:44 792

原创 Go语言核心36讲笔记12--接口类型的合理运用

文章目录1.接口的基础知识点2.如何判断一个数据类型的某个方法就是某个接口类型中的某个方法?3.当为一个接口类型赋值时会发生什么?4.接口变量的值在什么情况下才真正为nil?5.接口之间的组合6.如果我们把一个值为nil的某个实现类型的变量赋给了接口变量,那么在这个接口变量上仍然可 以调用该接口的方法吗?如果可以,有哪些注意事项?如果不可以,原因是什么?1.接口的基础知识点接口不能实例化,不能调用new函数或者make函数创建出一个接口类型的值不能用字面量来表示一个接口类型的值接口类型中声明的方

2021-09-11 15:25:10 88

原创 Go语言核心36讲笔记11--结构体及其方法的使用法门

文章目录1.函数与方法的区别2.结构体类型中的某个字段声明只有一个类型名,那么该字段代表了什么?3.Go语言是用嵌入字段实现继承吗?4.值方法与指针方法是什么意思,两者有何区别?5.思考题1.函数与方法的区别函数的定义声明中没有接收者,而在定义方法时会在func和方法名之间增加一个参数,这个参数就是接收者,这样就将方法和接收者绑定在一起了。此外方法隶属于类型。package mainimport "fmt"func main() { fmt.Println(sum(1, 2)) s :

2021-09-06 16:38:42 115

原创 GitHub不再支持密码验证

文章目录一、问题描述二、问题解决1.生成token2.提交代码3.将token添加到远程仓库链接中一、问题描述今天在提交代码到GitHub时出现以下报错信息:git push -u origin masterUsername for 'https://github.com': sunxi92Password for 'https://[email protected]': remote: Support for password authentication was removed on A

2021-09-06 16:35:18 508

原创 Docker环境下部署MySQL MGR单主模式集群

文章目录一、MySQL MGR单主模式集群部署1.拉取镜像2.创建MySQL专用网络3.创建MySQL容器挂载在本地的存储数据的目录4.创建3个MySQL容器5.在本地修改MySQL的配置项6.重启MySQL容器7.在所有MySQL容器中安装MGR插件8.在所有节点上创建复制账号9.启动MGR单主模式二、MySQL MGR单主模式集群中添加节点1.创建新节点在本地挂载的存储数据的目录2.创建1个MySQL容器3.修改新增MySQL容器的配置项4.重启新增MySQL容器5.在新增MySQL容器上安装MGR插件

2021-09-06 15:20:29 967

原创 Go语言核心36讲笔记10--使用函数的正确姿势

文章目录1.函数签名2.高阶函数3.思考题1.函数签名函数签名其实就是函数的参数列表和结果列表的统称,它定义了可用来鉴别不同函数的特征,同时也定义了与函数交互的方式。注意:各个参数结果和结果的名称不能算作函数签名的一部分,甚至对于结果声明来说,没有名称都可以。只有两个函数的参数列表和结果列表中的元素顺序及其类型是一致的,那么就可以说它们是一样的函数或者实现了同一函数类型的函数。package mainimport "fmt"type Printer func(contents string)

2021-08-12 14:53:53 112

原创 Go语言核心36讲笔记09--通道的高级玩法

文章目录1.单向通道1.1什么是单向通道?1.2单向通道有什么应用价值2.select3.思考题1.单向通道1.1什么是单向通道?单向通道是只能发不能收或者只能收不能发的通道,一个通道是单向的还是双向的是由它的类型字面量体现的。通道的类型字面量中的<-表示的是通道的方向:// 只能发不能收的通道var uselessChan = make(chan<- int, 1)// 只能收不能发的通道var anotherUselessChan = make(<-chan int,

2021-08-12 10:14:24 223

原创 Go语言核心36讲笔记08--通道的基本操作

文章目录一、pandas是什么?二、使用步骤一、pandas是什么?二、使用步骤

2021-08-03 18:55:16 159

原创 Go语言核心36讲笔记07--字典的操作和约束

文章目录1.字典的键类型不能是哪些类型?2.在字典中如何查找键值?3.优先考虑哪些类型作为字典的键类型?4.在值为nil的字典上执行读操作会能成功吗,那写操作呢?1.字典的键类型不能是哪些类型?Go 语言字典的键类型不可以是函数类型、字典类型和切片类型如果键的类型是接口类型的,那么键值的实际类型也不能是上述三种类型如果键的类型是数组类型,那么还要确保该类型的元素类型不是函数类型、字典类型 或切片类型注意:Go 语言规范规定,在键类型的值之间必须可以施加操作符==和!=。2.在字典中如何查找

2021-07-30 15:50:35 159

原创 Go语言核心36讲笔记06--container包中的那些容器

文章目录1.list基本使用2.ring基本使用3.Ring和List的区别4.heap1.list基本使用Go 语言的链表实现在其标准库的 container/list代码包中,这个包包含了两个公开的程序实体:List和Element,前者实现了一个双向链表,而后者则代表了链表中元素的结构。package mainimport ( "container/list" "fmt")func main() { //initialize a list l := list.New() fm

2021-07-30 14:18:54 104

原创 Go语言核心36讲笔记04--程序实体的那些事儿

文章目录1.声明变量的方式2.Go语言的类型推断带来哪些好处?3.变量重声明的前提条件4.Go语言中查找变量的过程5.不同代码块中的重名变量与变量重声明中的变量之间的区别6.类型断言表达式7.类型转换规则中有哪些值得注意的地方?8.潜在类型中需要注意的地方9.类型定义与类型别名10.思考题1.声明变量的方式var 变量名字 类型 = 表达式短变量声明2.Go语言的类型推断带来哪些好处?Go 语言的类型推断可以明显提升程序的灵活性,使得代码重构变得更加容易,同时又不会给代码的维护带来额外负担(实

2021-07-27 10:38:26 146

原创 Go语言核心36讲笔记05--数据和切片

文章目录1.数组与切片的区别与联系2.怎样估算切片容量的增长?3.切片的底层数组什么时候会被替换?4.思考题1.数组与切片的区别与联系数组的值的长度是固定的,而切片的值是可变长的切片的长度可以自动地随着其中元素数量的增长而增长,但不会随着元 素数量的减少而减少切片是引用类型,数组是值类型切片的容量表示其底层数组的长度切片的长度表示可以连续获取其底层数组中元素的数量2.怎样估算切片容量的增长?当一个切片无法容纳更多的元素时就会扩容,但是并不会改变原来的切片,而是会生成一个容量更大的切片

2021-07-23 10:35:06 85

原创 Go语言核心36讲笔记03--库源码文件

文章目录1.库源码文件2.示例demo3.思考题1.库源码文件库源码文件不能被直接运行,它仅仅用来存放程序实体,只要遵从Go语言规范,这些程序实体就可以被其他代码使用。2.示例demo(1)demo1代码结构如下://demo1.gopackage mainimport ( "flag")var name stringfunc init() { flag.StringVar(&name, "name", "everyone", "The greeting obje

2021-07-21 16:07:44 137

原创 Go语言核心36讲笔记02--命令源码文件

文章目录1.源码文件分类2.命令源码文件的用途3.示例demo思考题1.源码文件分类命令源码文件库源码文件测试源码文件2.命令源码文件的用途命令源码文件是程序的运行入口,是每个可独立运行的程序必须拥有的。我们可以通过构建或安装生成与其对应的可执行文件,后者一般会与该命令源码文件的直接父目录同名。如果一个源码文件声明属于main包,并且包含一个无参数声明且无结果声明的main函数,那么就是命令源码文件。对于一个独立的程序来说,命令源码文件永远只会也只能有一个。如果有与命令源码文件同包的源

2021-07-21 10:19:56 108

原创 Go语言核心36讲笔记01--工作区和GOPATH

文章目录1.设置GOPATH有什么意义?2.Go语言的组织方式3.源码安装结果4.构建和安装Go程序的过程5.思考题1.设置GOPATH有什么意义?环境变量 GOPATH 的值可以是一个目录的路径,也可以包含多个目录路径,每个目录都代表 Go 语言的一个工作区(workspace)。这些工作区用于放置 Go 语言的源码文件(source file),以及安装(install)后的归档文件(archive file,也就是以“.a”为扩展名的文件)和可执行文件(executable file)。

2021-07-20 16:29:57 88

原创 kubebuilder创建operator

文章目录前言一、环境准备二、kubebuilder demo1.创建一个project2.初始化项目3.在宿主机上安装kubectl4.安装CRD并部署controller5.创建CR前言一、环境准备1.go环境go环境搭建可以参考笔者之前的笔记macOS搭建go环境及VSCode安装使用教程sunxi@sunxideMacBook-Pro vagrant-provisioning % go versiongo version go1.16.5 darwin/amd642.kubebui

2021-07-05 11:24:54 567

原创 macOS搭建go环境及VSCode安装使用教程

1.go语言环境搭建在Mac上go语言环境搭建方式分为两种,一种是通过brew安装,一种是手动安装,这里笔者选择了后者,搭建步骤具体如下:(1)下载安装包,go安装包下载地址(2)将下载的安装包移至安装目录并解压tar -zxvf go1.16.5.darwin-amd64.tar.gz -C .(3)配置环境变量在.bash_profile文件中添加以下内容并使用source命令使之生效//go项目的工作路径,该目录需要自建,并且需要在该目录下新建src、pkg以及bin文件夹expor

2021-06-17 14:00:21 1987 1

原创 macOS搭建Tomcat源码环境

1.将Tomcat fork到自己仓库并将源码下载到本地git clone https://github.com/XXX/tomcat.git2.安装AntTomcat是ant构建的项目,所以需要安装Ant,安装步骤如下:(1)下载安装包(版本号至少是1.9.10)(注意:官方网站上给出了详细的build步骤,参考链接:https://tomcat.apache.org/tomcat-10.0-doc/building.html)(2)解压安装包unzip apache-ant-1.10.10-

2021-06-15 16:27:02 384

原创 RocketMQ源码分析之ACL

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码

2021-06-09 11:12:12 618

原创 macOS下netty源码环境搭建

前期准备前期需要安装的软件:JDKmavenGitIntelliJ IDEA源码环境搭建步骤1.将netty源码fork到GitHub上自己的仓库中2.使用下面命令将GitHub上自己仓库中的netty源码克隆至本地git clone3.使用下面命令编译源码:mvn install -DskipTests在执行该命令时会出现以下报错信息:[ERROR] Failed to execute goal org.fusesource.hawtjni:maven-hawtjni-p

2021-06-04 16:55:48 1191

原创 RocketMQ源码分析之消息轨迹

文章目录前言一、消息轨迹二、消息轨迹源码分析1、producer端2、consumer端三、消息轨迹中存储的信息1.TraceContext2.TraceBean3.TraceType四、总结前言  本篇文章将会从以下方面介绍消息轨迹:什么是消息轨迹?如何启用消息轨迹?示例demo、消息轨迹的源码分析和消息轨迹中存储的信息。最后会用一张图来总结消息轨迹的工作原理。一、消息轨迹1.什么是消息轨迹?消息轨迹是用来跟踪记录消息发送、消息消费的轨迹。2.如何启用消息轨迹?broker端需要在b

2021-06-02 15:31:35 574

原创 RocketMQ源码分析之延迟消息

文章目录前言一、延迟消息1.特点2.使用场景3.demo二、发送延迟消息三、broker端存储延迟消息四、总结1.延迟消息工作原理2.延迟消息在消费者消费重试中的应用前言本篇文章将会分析延迟消息的工作原理以及其在consumer端消息重试场景中的应用。一、延迟消息1.特点(1)与普通消息相比,延迟消息需要设置延迟级别,注意:延迟级别从1开始,如果延迟级别等于0则表示该消息不是延迟消息(2)延迟消息发送到broker后不会立刻被消费,而是需要等待特定时间后才被投递到真正的topic中(3)R

2021-05-28 15:05:31 576

原创 RocketMQ源码分析之批量消息

文章目录前言一、批量消息1. 批量消息特点2.使用场景3.demo示例二、批量消息发送1.generateFromList2.encode三、批量消息存储前言  本篇文章主要从以下几个方面来分析批量消息:批量消息的介绍、如何发送批量消息、批量消息在broker端时如何存储、消费者如何消费批量消息。一、批量消息1. 批量消息特点  批量消息有如下特点:   - 批量消息具有相同的topic   - 批量消息具有相同的waitStoreMsgOK属性   - 批量消息不支持延迟消息   -

2021-05-21 11:25:57 296

原创 RocketMQ源码分析之普通消息发送

文章目录前言一、Message对象二、DefaultMQProducer启动流程1.DefaultMQProducer启动流程图2.MQClientInstance启动3.producerGroup限制条件总结三、消息发送流程四、producer获取路由信息五、producer选择MessageQueue机制六、同步、异步及单向发送消息流程中的区别七、总结前言本篇文章来分析producer发送消息的流程,包括Message对象属性详解、producer启动流程、消息发送流程、producer获取路由信

2021-05-12 15:26:19 242

原创 RocketMQ源码分析之主从数据复制

文章目录前言一、元数据复制二、commitlog复制1.启动master并监听slave连接2.启动slave,建立与master连接及向master发送待拉取数据的物理偏移量3.master根据待拉取数据的物理偏移量打包数据并发给slave3.1 master读取数据3.2 master向slave写数据4.slave读取master发送的数据包5.总结三、同步复制与异步复制四、元数据复制与commitlog复制对比前言在RocketMQ主从架构中master和slave之间会进行数据同步,其中数据

2021-04-26 16:01:48 570

原创 RocketMQ源码分析之NameServer

目录前言一、NameServer启动流程二、NameServer通信线程模型三、Broker向NameServer注册路由四、路由信息详解五、删除路由信息前言在RocketMQ的架构中NameServer起到路由注册中心的作用,它一方面会接收Broker集群的注册信息并将其缓存下来,然后通过心跳监测机制来判断Broker是否存活;一方面Broker在向其发送注册的同时还会将Broker端的Topic及其配置信息发送给NameServer,NameServer也会缓存Topic相关信息。本节将通过Nam

2021-04-13 16:13:53 230

原创 RocketMQ源码分析之通信模块

目录前言一、RocketMQ线程模型1. NettyRemotingServer初始化2. NettyRemotingServer启动3. NettyRemotingServer线程模型4. NettyRemotingClient初始化5. NettyRemotingClient启动6. NettyRemotingClient线程模型二、RocketMQ如何实现同步、异步及单向调用1.同步调用2.异步调用3.单向调用前言本篇文章将从以下几方面分析RocketMQ的通信模块:RocketMQ的线程模

2021-04-09 14:12:50 355

原创 RocketMQ源码分析之Dledger模式

目录dledger集群搭建broker在启动的过程中如何触发选主流程dledger如何实现选主leader处理写请求及日志复制流程dledger commitlog与old commitlog数据格式对比dledger commitlog中如何构建consumequeue和index  RocketMQ集群部署可以分为两种方式master-slave和dledger,虽然master-slave方式提供了一定的高可用性,但是如果集群中的master节点挂了,这时需要运维人员手动进行重启或者切换操作,即不能

2021-03-26 09:44:42 2891 3

原创 RocketMQ源码分析之pull模式consumer

RocketMQ源码分析之pull模式consumerDefaultMQPullConsumerDefaultLitePullConsumer订阅方式的消费流程分配方式的消费流程重点方法分析DefaultMQPullConsumer与DefaultLitePullConsumer对比DefaultMQPullConsumerDefaultMQPullConsumer的实现及使用比较简单(已被废弃),从下面示例中可以看到消息的消费主要包含以下几点:构造DefaultMQPullConsumer对象,为

2021-03-04 11:32:12 2232

原创 RocketMQ源码分析之request-reply特性

1.什么是request-reply?  RocketMQ4.6.0版本中增加了request-reply新特性,该特性允许producer在发送消息后同步或者异步等待consumer消费完消息并返回响应消息,类似rpc调用效果。2. 使用场景快速搭建服务总线,实现rpc框架调用链追踪分析跨网络区域实现系统间同步调用3.使用方法producer端  producer端调用request(final Message msg, final long timeout)方法以同步方式等待co

2021-02-20 11:10:00 1825 1

原创 Mac上自动化搭建k8s集群

1.安装部署架构Mac上搭建三个虚拟机组成k8s集群2.安装virtualbox下载地址:https://www.virtualbox.org/wiki/Downloads3.安装vagrant下载地址:https://www.vagrantup.com/downloads//检查安装结果sunxi@bogon ~ % vagrant versionInstalled Version: 2.2.14Latest Version: 2.2.14You're running an up-to

2021-02-05 15:21:55 1719

原创 RocketMQ源码分析之基于SQL92过滤消息

1. 使用demo以下demo来源于RocketMQ源码中example包producerproducer端除了在构建消息时设置tag外,使用putUserProperty方法对消息设置一些属性public class SqlFilterProducer { public static void main(String[] args) throws Exception { DefaultMQProducer producer = new DefaultMQProduc

2021-02-04 11:08:18 786

原创 RocketMQ源码分析之基于tag方式消息过滤

1. Demo以下代码是RocketMQ源码中example包中的示例代码producerproducer端在发送消息时可以在构造消息时指定tagpublic class TagFilterProducer { public static void main(String[] args) throws Exception { DefaultMQProducer producer = new DefaultMQProducer("please_rename_unique

2021-02-02 12:20:48 1250

空空如也

空空如也

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

TA关注的人

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