- 博客(71)
- 收藏
- 关注
原创 ThreadLocal与ForkJoin使用踩坑记录
由于并发的需要原因,使用CompletableFuture异步执行Dubbo接口,RpcContext中存储了tenantId等信息。上线一段时间后,发现有些时候拿到的上下文并不是自己线程的上下文。
2024-06-03 14:56:02
269
1
原创 RocketMQ事务消息 超时重发还是原来的消息吗?
以下面的一个demo例子来分析一下,探索RocketMQ事务消息原理。通过上述例子的输出结果可以发现,checkLocalTransaction中queueOffset、msgId都发生的变化。那么在broker中到底发生了什么呢。
2023-10-27 09:24:00
193
原创 RocketMQ发送后丢消息的原因
最近排查线上线上业务时,发现有丢消息的情况。线上通过traceId查询相关日志后发现MQProducer报了如下错误通过翻阅RocketMQ代码,定位在BrokerFastFailure中Os PageCache busy,判断操作系统PageCache是否繁忙,如果忙,则返回true。想必看到这里大家肯定与我一样好奇,RocketMQ是如何判断pageCache是否繁忙呢?下面会重点分析。
2023-10-27 09:22:15
198
原创 DLedgerServer消息复制
答:从上述代码可以发现commit流程是独立的,又要有半数follower写入成功就算append成功了。在删除server2的StoreBaseDir后模拟消息数据被删除,触发同步。客户端请求写入消息时是Append成功就返回,还是要等待Commit才返回?定时会触发persistCheckPoint,保存checkpoint文件。EntryDispatcher.doWork继续工作时为APPEND状态。在EntryDispatcher代码中有如下状态转换。checkpoint文件格式。
2023-10-27 09:21:27
122
原创 DLedgerServer消息写入
当然dataFileList里写入的时候由于每个消息的大小不一样,所以在通过index的方式查询的时候只能一个个消息的遍历。为了提升查询的速度要需要使用到indexFileList,记录了每一个消息在dataFileList中的index和消息size,每一个indexBuffer的长度都是固定的,由magic(4)+pos(8)+size(4)+index(8)+term(8)共32个字节组成。方法里isPendingFull判断当前等待同步到peer的消息数是不是过多,默认是10000个。
2023-10-27 09:19:28
94
原创 RocketMQ mmap原理和使用
DefaultMmapFile中使用wrotePosition来记录buffer的写入位置,同时WROTE_POSITION_UPDATER.addAndGet更新wrotePosition当前位置。那这个就是一样的过程了,必须先把数据写入到用户进程空间里去,然后从这里再进入内核空间,最后进入磁盘文件里去。读取数据时,获取wrotePosition判断读取的位置是否大于写入位置,大于写入位置则返回null。普通的IO操作的一个弊端,必然涉及到两次数据拷贝操作,对磁盘读写性能是有影响的。
2023-10-27 09:16:42
145
原创 从零开始做一个SDWAN
VPN(Virtual Private Network)和SD-WAN(Software-Defined Wide Area Network)是两种不同的网络技术,它们在目的、功能和实施方式上有一些重要的区别。目的和应用场景:VPN:VPN主要用于在公共网络上创建一个加密的隧道,以确保数据的安全传输。它通常用于连接远程办公人员或远程站点到公司内部网络,或者在云服务提供商和企业之间建立安全的连接。VPN的主要目的是提供隐私和安全,将数据包加密,以保护数据在传输过程中不被窃取或篡改。
2023-10-25 17:21:59
1800
原创 Protobuf通信协议详解
Protobuf(全称是Protocol Buffers)是一种跨平台、语言无关、可扩展的序列化结构数据的方法,可用于网络通信数据交换及存储。在序列化结构化数据的机制中,Protobuf是灵活、高效、自动化的,相对常见的XML、JSON,描述同样的信息,Protobuf序列化后数据量更小、序列化/反序列化速度更快、更简单。一旦定义了要处理的数据的数据结构之后,就可以利用Protobuf的代码生成工具生成相关的代码。
2023-10-25 13:51:14
1185
原创 canal五部曲-如何处理insert幂等性的
canal使用了Rocketmq来接收mysql采集的binlog的事件,做到采集和处理的解耦。同时满足一次采集多方消费的需求。那么既然使用到Rocketmq就一定会存在MQ消费超时或是处理失败MQ重发的问题。
2023-10-24 16:09:24
161
原创 Java利用 ClassLayout 查看对象头
CacheTest test = test();System.out.println(ClassLayout.parseInstance(test.getList()).toPrintable());
2022-05-30 10:21:04
963
原创 Minio集成keycloak做权限管理
minio单机安装#!/bin/bashdocker stop miniodocker rm miniodocker run -d --name minio \--network=host \--restart=always \-e "MINIO_ROOT_USER=minioadmin" \-e "MINIO_ROOT_PASSWORD=minioadmin" \quay.io/minio/minio server \--address ":32001" \--conso
2022-05-19 09:03:21
1180
原创 centos7 k8s安装记录
masterhostnamectl set-hostname k8s-masterhostnamectl --static #查看设置结果systemctl stop firewalld.servicesystemctl disable firewalld.service#关闭swapswapoff -a#安装dockeryum install -y yum-utils device-mapper-persistent-data lvm2yum-config-manager --ad
2022-04-24 16:53:34
461
原创 java测试try-return和finally-return
测试try-eturn,finally里++public class Sample { public static void main(String[] args) throws Throwable { int retInt = testInt(); System.out.println("result:" + retInt); System.out.println("----------------"); String retSt
2022-04-08 13:59:31
508
原创 Arthas底层bytekit
public static void main(String[] args) throws Throwable { Sample sample = new Sample(); Thread t = new Thread(new Runnable() { @Override public void run() { while (true) { try ...
2022-04-06 13:31:42
242
原创 一种基于Redisson实现简单的分布式定时任务执行方案
一般在springcloud下单机执行定时任务的代码@EnableSchedulingpublic class TestTask { @Scheduled(cron = "0 * * * * ?") public void test() { System.out.println("say hello"); }}但因为微服务下一般是多实例部署,会导致定时任务多个实例同时执行的情况。通过对EnableScheduling进行分析,在调用定时方法时会把Meth
2022-03-09 14:37:02
1925
1
原创 Flink Hudi分析
Flink Hudi分析本代码分析基于Flink1.13.1、Hudi0.10.0-- 生成数据create table datagen ( id bigint, prod_id bigint, price int, uid bigint, buy_time timestamp) with ( 'connector' = 'datagen');-- hudi数据表create ta
2022-02-15 13:46:30
2414
原创 Redis实现分布式锁,非lua脚本
Redis实现分布式锁,非lua脚本初始化Spring StringRedisTemplateLettuceConnectionFactory factory = new LettuceConnectionFactory();factory.setHostName("localhost");factory.setPort(6379);factory.afterPropertiesSet();StringRedisTemplate stringRedisTemplate = new StringR
2022-02-10 20:19:50
1424
原创 Java主线程调度,ExecutorService执行任务
Java主线程调度,ExecutorService执行任务在项目开发过程中,遇到了需要并发处理(例:调用百度API查询一批GPS的位置)的情况,但是http查询有QPS限制,因此只能指定一个固定的线程数执行。但是Executors.newFixedThreadPool默认使用的是LinkedBlockingQueue,因此大数据量的情况下,数据全部offer到队列很容易触发OOM。如果配置了LinkedBlockingQueue的capacity,则会触发ThreadPoolExecutor.Reje
2022-02-10 19:20:30
1617
原创 发布maven中央仓库
一、创建工单https://issues.sonatype.org依次输入。Project:选择开源项目Issue Type:选择创建新项目Summary:随意命名Group ld:唯一标识,最好用自己的域名,管理员会问xxx.com这个是不是自己的网站,回答是就好了,如果使用com.github.xxxxx之类的,会方便一些。ProjectUrl:项目源码地址,二、下载gpghttps://gpg4win.org/1.gpg --gen-key2.gpg --list-keys3.
2022-01-19 14:20:20
227
原创 springboot junit配置logLevel
import ch.qos.logback.classic.Level;import ch.qos.logback.classic.Logger;import ch.qos.logback.classic.LoggerContext;import org.junit.Test;import org.slf4j.impl.StaticLoggerBinder;public class JTest { @Test public void test() { Logg.
2021-12-07 19:46:30
660
原创 RabbitMQ批量接收器
import com.rabbitmq.client.AMQP;import com.rabbitmq.client.Channel;import com.rabbitmq.client.DefaultConsumer;import com.rabbitmq.client.Envelope;import com.rabbitmq.client.GetResponse;import lombok.extern.slf4j.Slf4j;import org.springframework.amqp.
2021-10-15 17:32:59
440
原创 flink sql 处理自定义json解析
最近要把公司flinknginx日志入库的代码,修改成flinksql的方式执行。这样日志的入库通过sql更加方便。但是flinksql没有提供对json的解析方式,而nginx日志又是json字符串无法完全使用sql来完成日志的入库。因此,需要修改flink来完成json的自定义解析。首先定义source表CREATE TABLE kafka ( json_data string, type string, ts TIMESTAMP(3) METADATA FROM...
2021-04-02 10:59:20
5782
原创 Netty开发调试设置io.netty.leakDetection.level=PARANOID定位内存泄漏问题
看到这个错误,看不出内存泄漏的位置。但在环境里也没有设置-Dio.netty.leakDetectionLevel=advanced这个问题在测试环境出现还好,如果在生产环境那就糟糕了。所以怎么可以今早在开发过程中就发现以及定位到内存泄漏的问题呢?Netty的内存泄漏检测分为四个级别:DISABLED - 完成禁止检测内存泄漏,这个是不推荐。 SIMPLE - 如果buffer中出现1%的内存泄漏,打印错误日志,就是上面那样。但是日志是看不到详细在什么位置出现了内存泄漏。鉴于性能考虑,这
2021-04-01 13:25:40
3152
原创 flink checkpoint 执行流程
class Src extends RichSourceFunction<Integer> implements CheckpointedFunction, CheckpointListener { @Override public void initializeState(FunctionInitializationContext context) throws Exception { Syste...
2021-03-26 21:27:16
381
原创 Presto hive 各种格式执行时间
select 'orc',count(*) from hive.tmp.test_orc_file;select 'avro',count(*) from hive.tmp.test_avro_file;select 'rcfile',count(*) from hive.tmp.test_rcfile_file;select 'seqfile',count(*) from hive.tmp.test_seqfile_file;select 'parquet',count(*) from hive.
2021-03-15 14:48:20
388
原创 滴滴Chameleon 全局事件 EventBus
Android:@CmlModule(alias = "event")public class EventModule { private Map<String, Map<String, CmlCallback<JSONObject>>> callbackMap = new HashMap<>(); @CmlMethod(alias = "on") public void on(ICmlInstance instance,
2021-03-04 19:11:42
165
1
原创 滴滴Chameleon 原生跳转vue界面
滴滴Chameleon 原生跳转vue界面CmlWeexInstance.reload(url);CmlWeexView.getInstance().reload(url);
2021-03-03 16:50:25
179
1
原创 滴滴Chameleon 返回键事件监听
分析Android的代码CmlWeexActivity.onBackPressed触发的以下调用CmlWeexActivity.onBackPressed|-->CmlWeexInstance.onBackPress|---->CmlEngine.getInstance().callToJs(this, "cml", "onBackPressed", null, null);但是查询官方文档后并没有给出onBackPressed是如何调用的于是继续查询Chameleon SDK
2021-03-03 14:41:45
169
1
原创 高并发下,Tomcat、HttpClient让系统瘫痪
高并发下,Tomcat、HttpClient让系统瘫痪最近做了一个项目,需要通过http多次请求和外部系统数据交换,例如支付,地图等。但是交互过程通过http调用第三方接口响应时间慢会导致并发量下降,甚至堵死系统。下面将从Tomcat底层原理上分析为什么http交互会导致Tomcat性能下降。Tomcat和BIO老版本的Tomcat底层使用BIO方式实现,就是java常用的Socket网络...
2020-02-23 12:52:03
1964
原创 ReentrantLock加锁的原理
今天我们来研究学习一下ReentrantLock类的相关原理,ReentrantLock的内部使用AbstractQueuedSynchronizer实现线程锁。除了ReentrantLock在java.util.concurrent包中还有很多类都依赖于这个类所提供队列式同步器。为了方便学习我们以ReentrantLock为例,来学习ReentrantLock和AbstractQueuedS...
2020-02-04 19:42:33
539
原创 自定义Spring EL解析
@Test public void test() { //数据 Properties properties = new Properties(); properties.put("text", "hello world"); properties.put("timeout", "#{30 * 1000L}"); ...
2019-11-13 14:53:37
440
原创 elasticsearch 创建、删除索引
public class EsAdmin { private TransportClient client; public EsAdmin(TransportClient client) { this.client = client; } @Override public void createIndex(String index, ...
2019-08-08 14:16:50
574
原创 Spring图片、文件资源断点续传,视频流播放
import org.apache.commons.io.FilenameUtils;import org.apache.commons.lang3.StringUtils;import org.springframework.core.io.FileSystemResource;import org.springframework.core.io.support.ResourceRegio...
2019-08-08 09:43:44
420
原创 postgresql常用查询
查询表字段SELECT col.table_schema AS schema_name, col.table_name, col.column_name, col.character_maximum_length, col.is_nullable, col.numeric_precision, col.numeric_scale, col.datetime_precision...
2019-04-23 20:36:54
692
原创 springboot生产环境不加载classpath:application.properties,重新指定文件
最近一次生产环境部署,发现线上的zookeeper中注册的ip地址为测试环境的ip,然后查看了程序里的/src/main/resources/application.properties,发现开发人员在配置了spring.cloud.zookeeper.discovery.instance-host=192.168.1.128但是 线上的配置文件没有覆盖配置,线上启动后依然是192.16...
2018-11-16 13:15:29
3543
原创 ConfigurableEnvironment转Map
public final class EnvironmentUtils { private EnvironmentUtils() { } public static Map<String, Object> extractProperties(ConfigurableEnvironment environment) { re...
2018-10-20 14:25:36
666
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人