自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 资源 (2)
  • 收藏
  • 关注

原创 osx批量删除通过.ics文件导入的calendar event

ics文件可以快速批量向calendar导入event,但如果我们错误导入了event,想要通过手动删除则效率很低,此时我们可以通过修改.ics文件批量删除。重新导入修改后的.ics文件,即可发现所有event变为deleted。此时calendar左侧的new会有很多deleted提醒。我们需要关注的配置项为VCALENDAR的METHOD和VEVENT的STATUS。按住option键可以发现变为delete all,批量删除提醒即可。我们来看.ics文件的结构。

2023-06-07 11:30:37 185

原创 spring data jpa中实现数据库记录的insertIfNotExists

最近在业务开发中,需要通过lazy init的方式向一张table中插入数据,该table中一个column存在unique约束。

2023-03-30 18:24:50 390

原创 flink mysql cdc调试问题记录

最近需要用到flink cdc作为数据流处理框架,在demo运行中发现一些问题,特此记录问题和解决过程。

2023-03-10 14:36:59 4164 4

原创 Flink watermark与乱序消息处理机制

flink watermark与乱序处理

2022-11-19 23:41:07 892

原创 MinIO is already stopped的解决方案

bitnami/minio启动报错:MinIO is already stopped

2022-10-27 18:16:52 3025 8

原创 grafana配置notification mail出现user password expired

null

2022-08-15 17:38:51 239

原创 mysql aggregation函数的返回类型

null

2022-08-11 15:38:00 215

原创 tcpdump抓包与iptables过滤的关系

null

2022-07-30 09:09:50 551

原创 基于netty的java程序在arm平台使用

基于netty开发的tcp server,基本模式是创建reactor thread,之后bootstrap server。将编译后的jar包在arm上运行时,可以发现无法创建EpollEventLoopGroup。原因在于netty依赖的epoll动态链接库在4.1.49.Final及之前的版本只提供了x86_64平台的.so文件,如图:升级版本至4.1.50.Final或更高版本,可以发现arm64平台的.so文件,正常启动。...

2022-03-31 17:51:06 1416

原创 docker-compose中env_file所定义的环境变量

在docker compose中可以通过env_file定义使用的环境变量,但是此处定义的环境变量是用于docker运行的,无法用于在docker compose文件中替换image等内容,如果要定义docker compose中的变量,可以有两种办法:使用.env文件 使用docker-compose --env-file image.env up使用第二种方法时,需要注意使用多个env_file带来的覆盖问题。参考:Variables resolved from env_file but

2022-02-22 16:30:36 6144

原创 基于kafka manager的rest api自动创建cluster

kafka manager是常用的kafka监控,ui界面操作简单,信息全面,使用广泛。当我们基于docker部署zookeeper, kafka系列组件时,希望能够自动添加相关的集群监控,避免手动操作。我们进入kafka-manager的container可以发现如下url描述文件:/kafka-manager/conf/routes,该文件描述了kafka-manager相关的rest api。使用rest api创建topic时,需要在url中描述所需的全部参数,否则创建失败,经过测试,可

2022-02-18 19:14:50 1215

原创 基于docker发布java应用时的pid设置

当我们使用docker发布java应用后,可以通过top命令查看容器中java进程的PID,基于如下考虑,当PID不为1时,建议修改docker构建和启动方式,保证PID为1:PID为1的进程结束后,容器会随之结束,这样可以通过宿主机监控,保证及时检测到容器的异常退出 docker正常关闭时,PID为1的进程能够接收到关闭信号,从而保证实现优雅关闭我们可以通过如下方法保证java进程在容器内部启动时的PID为1:ENTRYPOINT中直接启动["java", "-jar", "app.jar"]

2022-02-18 14:47:05 1371

原创 docker standalone下启动flink job无法找到resource manager

当我们通过docker在standalone下启动flink job时,按照示例(Docker | Apache Flink)能够正确启动。但我们将配置项中的jobmanager.rpc.address换成自定义的jobmanager_xxx时,jobmanger和taskmanager启动永远报错:org.apache.flink.runtime.jobmaster.JobMaster [] - Could not resolve ResourceManager

2022-02-14 22:21:56 1653

原创 start order control of docker-compose

在使用docker-compose组织docker时,我们可能需要控制docker的启动顺序,保证container的正常运行。启动顺序的依赖可以分为两种类型:containerA依赖containerB启动,只要containerB启动,即可启动containerA containerA依赖containerB启动,但containerA依赖containerB中某些耗时操作(初始化数据、建立一定数量的tcp连接),在这些操作完成后,containerA才能启动,否则无法正常运行对于情况1,可

2022-01-29 17:25:48 1580

原创 zap增加log rotate

rzap.NewGlobalLogger([]zapcore.Core{ rzap.NewCore(&lumberjack.Logger{ Filename: "/your/log/path/app.log", MaxSize: 10, // 10 megabytes, defaults to 100 megabytes MaxAge: 10, // 10 days, default is not to remov...

2022-01-24 17:22:15 338

原创 sbt编译时cache jar的位置

当使用sbt构建时,我们可能需要删除本地预先存在的jar包(仓库可能进行了更新)。在通常认知中,sbt依赖的jar包存储在~/.ivy2下,但注意sbt新版本的变更:sbt Reference Manual — sbt 1.3.x releases采用Coursier进行包管理。因此,如果需要删除本地缓存,在osx系统下需要找到该目录~/Library/Caches/Coursier/v1并删除对应的jar包...

2022-01-14 15:38:53 429

原创 基于docker部署flink job的总结

近期,由于项目需要,对于基于docker进行flink job部署进行了小规模测试,顺便对于flink运行机制进行了深入的了解。为了达到快速部署和基础环境稳定的目的,考虑使用docker部署(k8s基础环境搭建复杂,调研中未使用),参考官方文档如下:Docker | Apache Flinkflink部署模式有下列三种:session,全局单一cluster,所有的job运行于单一集群,全局只有一个job manager application,每个job有一个job manager,jo

2021-12-30 18:49:27 2901 4

原创 apache common pool中idle resource处理的相关配置

apache common pool提供了抽象的resource pool实现,可以快速封装tcp等resource。连接池内置了idle, evict的实现,可以对idle resource进行有效管理,回收过多的idle resource。在apache common pool中,关于idle resource的配置项较多,配置项需要组合使用,下面对常用的配置项组合及其效果进行分析。仅控制idle连接的数量至maxIdle以下设置minIdle, maxIdle。此时resource

2021-09-29 17:45:13 165

原创 Netty ByteBuf的回收

以下三种情况下对于ByteBuf的回收策略:ChannelOutboundHandler中write的ByteBuf,在pipeline中的tail handler将负责释放,详见AbstractChannelHandlerContext中的如下函数 private void write(Object msg, boolean flush, ChannelPromise promise) { ObjectUtil.checkNotNull(msg, "msg");

2021-08-13 15:40:38 577

原创 In-memory cache设计总结 - caffeine

接上文https://blog.csdn.net/kakaweb/article/details/114891920

2021-06-23 15:13:36 276

原创 In-memory cache设计总结 - 前言

TODO

2021-06-17 17:09:19 191

原创 使用zgc导致linux平台下top命令显示内存占用超过100%

背景手头有一个流式计算项目,特点是高吞吐且对延时敏感,heap大小在50G左右,原先使用的G1GC在高峰期的gc时间长达30s以上,对下游业务造成了干扰。经过多次调优,仍然不理想,因此尝试使用JDK11的ZGC优化performance。经过初步试运行,ZGC在同样吞吐量的情况下,能够有效缩减STW时间,提升效率。但运行中发现一个问题,当我们使用top命令查看程序运行情况时,发现如下的现象,程序占用的%MEM超过了100。原因由于程序运行正常,操作系统也没有运行其它程序,因此我.

2021-03-24 12:04:38 2028

原创 Kafka客户端异步写入时的同步锁问题

近期使用java开发基于kafka的数据流相关业务,基本处理流程为:订阅kafka topic 数据处理 将处理后的结果写入下游kafka在调试过程中发现,step1 & 2性能都非常高,单机(40 cores)能达到30kTPS,但加上step 3之后,性能只有6k TPS。由于我们使用的是异步写入kafka的模式,不应该有如此大的性能下降。通过深入代码,有如下发现:将一条record append到本地buffer时,需要对batch队列进行同步(可能有两次)因此,多.

2021-01-18 16:36:19 512 2

原创 curl和HttpClient对于系统代理的处理差异

背景公司项目中,需要跨机房通过HTTP协议传输数据,SRE部门在远端通过域名暴露了一个influxdb服务,客户端在异地机房通过该域名写入时序数据。现象测试连通性时,使用curl进行如下测试,结果正常,说明网络访问没问题。curl -i "http://<host_name>/ping"但使用HttpClient/OkHttpClient进行数据发送时,一直出现connect timeout错误,无论如何调整timeout的大小,都无法成功发送请求。挖掘解.

2020-06-28 19:42:49 2011 3

原创 springboot整合logback的小坑

springboot+logback是非常成熟的套装了,通常为了在多环境启动,我们会有多个配置文件通过不同的启动参数满足不同环境的运行需求。如图所示。当我们创建3个不同环境的logback文件(logback-dev.xml/logback-test.xml/logback-prod.xml)时,通过启动日志可以发现,加载的文件永远是logback-test.xml。查看logback源码可以发现,在启动时ContextInitializer按以下顺序尝试获取classpath下的配置.

2020-05-13 17:15:02 338

原创 本地访问基于docker启动的hbase的小坑

基于docker搭建开发环境省去了许多配置工作,能够提高效率,但也带来了一些和网络相关的坑,特此记录:端口是否全部映射?hbase使用的端口非常多,zookeeper/region server/master server...,如果遗漏了端口未映射到本地端口,本地java client访问将报错region server名称是否在本地路由表中映射?本地使用docker启动后,可以通过web页面查看详情:注意到此处的region server使用的名称并非ip而是一...

2020-05-09 15:08:42 1259

原创 JDNI加载资源导致的javassist修改字节码失败

由于监控链路升级的需要,需要对应用访问redis的性能进行监控,即需要在redis操作前后加上如下代码:{ java.util.Map<String, String> tags = new java.util.HashMap<>(); tags.put("ops", "scan"); tags.put("appName", "xxx"); long begin...

2020-02-04 13:13:36 890

原创 go运行时机制(1) - 调度模型

golang以其强大的并发能力在io密集型应用场景下得到了广泛的应用,goroutine & channel & runtime机制的引入能够使得开发者能以较低的心智负担和较高的开发效率开发高性能的应用。goroutine在创建之后,由runtime在用户态进行调度,即用协程取代了线程。关于线程与协程的区别,参见博文:https://blog.csdn.net/kaka...

2019-11-01 22:53:08 517

原创 并发与运行时调度(3) - 线程 vs. 协程

在之前的文章中,对于多线程程序在操作系统中的调度问题已经做了一定的介绍,详见:https://blog.csdn.net/kakaweb/article/details/102214586当处于running状态的线程进行系统调用、阻塞io、获取锁等操作时,将进入blocking状态,将cpu core出让给其它处于runnable状态的线程,这一过程被称为上下文切换,需要保存stack、...

2019-10-20 00:12:21 258

原创 并发与运行时调度(2) - cpu local cache

在系统运行中,我们常常忽视cpu local cache miss/hit带来的性能差异,因此,有必要了解cpu local cache的工作机制,为高性能程序的开发提供理论指导。存储体系结构通常来说,现代计算机存储结构基本可分为如下等级:register ->local cache -> memory -> disk storage,其中local cache可能...

2019-10-10 23:18:59 276

原创 并发与运行时调度(1) - 操作系统线程调度

作为一种提高计算机多任务处理能力的方法,多线程编程已经得到了广泛的应用,同时主流编程语言也已提供完备的支持。然而由于任务类型、运行环境的变化,多线程程序的执行效率存在巨大的差别。因此有必要理解操作系统对于多线程任务的调度模型和相关算法,以此加深对底层运行机制的理解,产出更优秀的程序设计。本文中的相关模型均以linux系统为例。指令执行首先,我们需要了解任何语言写出的代码如何被操作系...

2019-10-09 22:35:20 740

原创 redis cluster水平扩容中的客户端处理逻辑

作为一个分布式K-V存储,redis cluster通过将数据切分为16384个slot进行分布式存储,用公式表示如下:作为一个支持水平扩容的分布式系统,redis集群在扩容时通常遵循如下步骤:1.在新节点启动redis进程2.将新节点加入集群3.迁移部分slot至新节点在较老版本的redis cluster中,该指令通过redis-trib.rb脚本执行,在新版本的red...

2019-08-24 23:08:47 803

原创 redis cluster水平扩容中的服务端处理逻辑

redis cluster在水平扩容和数据迁移过程中,需要经历如下阶段:1.set slot as migrating on the source node2.set slot as importing on the target node3.execute migrate command on the source node4.setslot <slot> NODE ...

2019-08-24 23:06:59 220

原创 使用javassist修改类字节码时关于范型一个小坑

javassist作为一款低门槛的java字节码修改工具,允许用户以java代码的方式修改java类文件,无需对类文件的结构有深入的了解。最近,在公司项目中使用了javassist,使用过程中遇到了一个和范型有关的小坑,特此记录。代码如下: StringBuffer stringBuffer = new StringBuffer(); stringBuf...

2018-11-28 21:40:24 6900 6

原创 Elasticsearch 6.4.0 head插件离线环境安装

提要由于elasticsearch 6.0之后的版本head插件不再作为插件形式提供,需要单独安装,通常有两种安装途径:1.通过chrome应用市场安装head插件,安装完毕之后是一个chrome插件,这是最简单的2.手动安装head插件,这种方法需要npm辅助在某些内外网隔离的开发环境中安装head插件,第一种方法是不可能了,选择第二种方法,必须保证你的内网有npm私服。 ...

2018-09-11 14:45:52 5370 2

原创 单机搭建Elasticsearch Cluster纪要

Elasticsearch作为一个升级频繁的热门开源中间件,搭建集群摸索使用方式也就成了程序员的必修课之一。既然是搭建集群,就涉及到创建多个节点的问题了。一般来说,作为业余学习,搭建集群基本就2个方法:1.云上买多台服务器搭建2.本地启动多个实例处于成本考虑,自然优先选择第二个方案。首先列举一下环境:elasticsearch6.4.0 + jdk8 + head插件(直接...

2018-09-03 23:39:07 188

原创 由于域名解析异常导致的Kafka消息发送失败但无异常抛出

背景由于业务需要,最近部署了一个跨网段的服务,由一个网段中的应用服务器向另一个网段中的Kafka集群写入消息,应用服务器与Kafka集群之间已经开通网络,telnet结果显示相应端口之间连接正常。初次上线之后,发现如下方法执行正常,未出现超时阻塞运行现象,但Kafka消费者无法接收发送的消息,怀疑消息并未真正写入Kafka集群中。producer.send(record)源码追踪...

2018-08-09 17:56:14 5519

原创 Redis Cluster搭建记要

简要记录下redis cluster搭建过程,以备将来查询使用。 步骤一:编译安装redis 下载redis-4.0.1源码包 make MALLOC=libc make install PREFIX=/usr/local/redis 步骤二:安装集群所需环境 建立集群所需的配置文件,修改redis.conf,如果在单机上部署多个redis节点(以3 master...

2017-11-23 10:31:06 201

原创 小记 - ltp server服务搭建指南

前言最近想了解下nlp相关的技术,就找了ltp开始上手。ltp主页 : http://ltp.readthedocs.io/zh_CN/latest/index.htmlltp是哈工大开发的中文自然语言处理套件,现在也对外提供云服务,不过对于接口调用频率和次数做了一定的限制 : http://www.ltp-cloud.com/ltp server允许用户在本地启动一个nlp服

2017-09-13 20:19:35 1996

原创 记一次和Tomcat有关的Too many open files错误

前言最近在公司开发推送系统相关的项目,需要在单台Linux服务器上支持几十万到上百万的连接,为此,修改了操作系统的文件描述符上限。相关修改操作可参考:http://jameswxx.iteye.com/blog/2096461修改并重启后使用ulimit -a查看发现open-file变大。之后,使用netty简单构建一个服务端demo,经测试证明该demo能够支持多于

2017-05-16 20:51:22 321

bloomberg developer guide

bloomberg developer guide

2018-08-21

STL源码剖析

STL源码剖析 带目录版本,推荐STL使用者阅读

2014-12-15

空空如也

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

TA关注的人

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