自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 八、Kafka-幂等

ps : kafka幂等是针对producer来说的1、消息语义At most once : 消息可能会丢失,但不会重复At least once : 消息不会丢失,但可能重复Exactly once : 正好一次。消息不会丢失也不会重复2、为什么需要幂等?在0.11.0.0之前,如果producer未能收到已提交消息的response,除了重新发送消息外别无选择,但提供了至少一次的语义保证。即原始请求已经成功,但因为某些原因(网络抖动、超时等问题),导致producer没有收到broke

2020-09-13 21:50:09 181 1

原创 七、Kafka offset概念及提交方式

1.偏移量kafka的消息所在的位置由Topic、Partitions、Offsets三个因素决定。Offset代表Partition中的消息的顺序ID。例如:第一个进入的Offset为0,第二个为1,以此类推。由于消费者消费Kafka消息也与Offset和consumer的group.id有关,故此维护好消息的Offset对于避免消息的重复消费与遗漏消费,确保消息的Exactly-once是至关重要的。2. 提交偏移量当我们在程序中使用poll()拉取消息时,Kafka总是返回生产者写入但

2020-09-09 23:15:44 2444 1

原创 六、Kafka consumer及ConsumerRebalanceListener实现

1. comsumer代码示例及ConsumerRebalanceListener实现public class ConsumerMessage { private static final String TOPIC_NAME = "topic-07"; public static void main(String[] args) { Properties props = new Properties(); props.setProperty("boots

2020-09-06 09:23:24 1729 1

原创 五、Kafka 消息存储与同步

一、副本分配1、副本分配原则将副本平均分配给Broker 对于分配给特定的Broker分区,该分区的其他副本分布在其他Broker上 如果所有Broker都有机架信息,则尽可能将每个分区的的副本分配给不同的机架2、无机架从Broker列表中随机选取一个Broker作为起始位置,通过轮询分配每个分区的第一个副本 以增加位移的方式为每个分区分配剩余的副本 如下图,3个分区,3个副本。第一个Leader分区被分配到broker1上,那么其他两个分区会分配到broker2和broker

2020-08-27 22:03:12 537

原创 四、Kafka的元数据-MetaData

1、元数据(MetaData):服务器活动状态 Topic和Topic的分区 Partition都有哪些Replication 哪个Replication是Leaderps: 一般情况下,客户端会把元数据缓存起来,并直接往目标Broker上发送生产请求和获取请求。 客户端需要定时发送元数据请求来刷新这些信息。 2、元数据请求时序图:...

2020-08-18 22:59:22 2433

原创 三、Kafka Producer发送消息及分区策略

1、Producer代码实现ps:不建议使用自定义序列化和反序列化,他们会把生产者和消费者耦合在一起,且容易出错// 同步发送消息、// 异步发送消息public class KafkaProducerDemo { private static Properties prop; private static KafkaProducer<String, String> producer; private static final String TOPIC_N.

2020-08-18 16:07:50 4121

原创 二、Kafka安装及伪分布式部署

PS: Windows不是良好的运行环境 运行Kafka必须要先运行Zookeeper。可以使用内置的Zookeeper,也可以使用另外安装的Zookeeper 文件描述符限制,官方建议至少使用100000个文件描述符作为起点 设置合适的vm.max_map_count 1、下包$ wget https://mirror.bit.edu.cn/apache/kafka/2.5.0/kafka_2.12-2.5.0.tgzs2、配置这里进行单机伪分布式配置

2020-08-16 16:37:26 285

原创 一、Kafka基本概念整理

1、什么是kafka? Kafka最初由LinkedIn公司使用Scala开发的一个分布式、多分区、多副本,基于ZK协调的内部基础设施,先已捐给Apache。 Kafka是一个流平台,主要用来发布和订阅数据流。 Kafka具有水平可伸缩性、容错性、快速性 2、Topic Topic是Kafka的核心抽象,Topic是将信息记录到的某个类别或订阅源名称。 可用来区分业务系统。 特点: Topic始终是多用户的,即一个Topic可以有0个、1个或

2020-08-16 16:31:50 211

原创 gitLab找回误删分支--亲测有效

1、查找提交的commit## 显示操作时间git reflog show --date=iso2、查看commitId对应的提交详情git show a7e5a418333、根据commitId恢复分支git checkout -b <分支名> <commitId>4、over,该干嘛干嘛

2022-02-17 17:40:13 514

转载 三、ShardingSphere基础 核心概念

ShardingSphere 4.1.1文档1、数据分片1.1、SQL逻辑表: 水平拆分的数据库(表)的相同逻辑和数据结构表的总称。 例:订单数据根据主键尾数拆分为10张表,分别是t_order_0到t_order_9,他们的逻辑表名为t_order 真实表: 在分片的数据库中真实存在的物理表。 例:即上个示例中的t_order_0到t_order_9 数据节点: 数据分片的最小单元。由数据源名称和数据表组成 例:ds_0.

2021-10-09 06:00:00 176

原创 二、ShardingSphere基础 分库分表组件对比

对比项 Cobar TDDL ShardingSphere-JDBC Mycat 分库支持 Yes Yes Yes Yes 分表支持 No ...

2021-10-08 06:00:00 311

原创 一、ShardingSphere基础 分库分表

1、为何要分库分表? 常规在未进行分库分表的情况下,随着时间的推移,表中的数据量会越来越多,即表越来越大。 最终会导致:一台服务器的资源不足 库中的表越来越多,表中的数据量越来越大 增删改查的开销越来越大2、如何优化?分库分表3、垂直拆分、水平拆分3.1、垂直拆分垂直拆分数据库是指按照业务将表进行分类,部署到不同的数据库上面去,这样就能将数据(压力)分担到不同的数据库上面去。例如:将商品、订单、用户...

2021-10-07 21:50:22 442

转载 redis(四):redis为什么这么快

先上结论:redis是纯内存操作。redis整个就是一个全局hash表,时间复杂度为O(1),而且为了防止hash冲突导致链表过长,redis会进行rehash操作,扩充hash桶的数量,减少hash冲突。并且采用的是渐进式rehash,防止一次性重新映射导致线程阻塞。IO多路复用单线程模型,保证了每个操作的原子性,减少了线程的上下文切换的开销和竞争。针对不同数据结构进行了优化根据实际存储的数据类型选择不同编码1、纯内存操作redis将数据存储在内存中,读写操作不会因为磁盘的IO速度.

2021-05-06 15:42:21 154

原创 使用线上日志统计接口QPS

面试中经常会被问到项目的QPS是多少就找了几个调用频繁的接口来统计一下cat biz-all.log | grep '顺丰物流回传' | awk -F 'INFO' '{print substr($1,1,19)}' | uniq -c | sort -n结果 102 2021-03-30 09:07:42 111 2021-03-30 04:24:41 162 2021-03-30 02:26:47 198 2021-03-30 04:24:38能.

2021-03-30 14:28:33 498 1

转载 JUC AQS ReentrantLock源码分析

转载:https://blog.csdn.net/java_lyvee/article/details/98966684,写的超详细

2021-01-27 23:37:48 166 1

原创 mongodb聚合及morphia写法

先附上mongodb官方文档一、mongodb聚合1、表达式表达式含义$match数据筛选$project翻译为投射 ,即将一个数据结果映射为另一个结果 过程中可以对某些数据进行修改 控制其最终显示的结果$group分组$sort排序$limit取几条$skip跳过几条$sample随机取出n条记录2、$match#match 用于对数据进行筛选{"$match":{"字段":"条件"}},可以使用任何常用查询操作符$g

2020-11-19 17:07:23 701

转载 原来 8 张图,就可以搞懂「零拷贝」了

前言磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝、直接 I/O、异步 I/O 等等,这些优化的目的就是为了提高系统的吞吐量,另外操作系统内核中的磁盘高速缓存区,可以有效的减少磁盘的访问次数。这次,我们就以「文件传输」作为切入点,来分析 I/O 工作方式,以及如何优化传输文件的性能。正文为什么要有 DMA 技术?在没有 DMA 技术前,I/O 的过程是这样的:CPU 发出对应的指令给磁盘控制器,然后返回; ...

2020-09-24 18:22:02 109

原创 application.properties敏感信息加密

1. 依赖<!-- 试了一个高版本,会报错,选择用了这个版本的 --><dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.1.1</version></dependency>2. 启

2020-09-01 10:53:16 634

原创 springboot2.3.1 tomcat设置特殊字符入参

最近遇到一个问题,在请求中,参数传了json串,请求会报错The valid characters are defined in RFC 7230 and RFC 3986 @Bean public TomcatServletWebServerFactory webServerFactory() { TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();

2020-08-06 14:36:04 682

原创 Class.getComponentType()用法

可以返回表示数组类型的Class。 isPrimitive()用来判断指定的Class类是否为一个基本类型 String [] arr = new String[10]; String str = ""; System.out.println(arr.getClass()); // 数组的String 类 System.out.println(str.getClass()); // 非数组的String 类 Syste.

2020-05-15 18:40:43 1544

原创 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.xxx.UserDAO

前提:1、多module的springboot项目2、service层调用dao层报错org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.wanting.dao.dao.UserDAO.selectById at org.apache.ibatis.bindin...

2020-05-02 20:42:41 698 1

原创 一、Elasticsearch基本搜索语法

一、索引文档简单索引文档PUT /megacorp/employee/1PUT /索引/类型/_id //相当于sql insert; {}中的json格式数据为源数据语句:PUT /megacorp/employee/1{ "first_name" : "John", "last_name" : "Smith", "age" : ...

2020-04-26 15:48:45 261

原创 netty(三):netty粘包拆包问题

问题简介TCP是一个“流”协议。所谓流,就是没有界限的一串数据。TCP并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包,可能被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包进行发送。示意图解决方案由于TCP无法理解上层的业务数据,所以在底层是无法保证数据包不被拆分和重组的,这个问题只能通过上层的应...

2020-03-08 12:00:10 109

原创 netty(二):netty基础

简介 netty是一个Java开源框架。提供异步的、事件驱动的网络应用程序的框架和工具,用以快速开发高性能、高可用的网络服务器和客户端程序。 netty是一个NIO客户端、服务端框架,允许快速简单的开发网络应用程序。 优点api使用简单,开发门槛低。 功能强大,预置了很多编解码功能,支持多种主流协议。 定制功能强,可以通过ChannelHandler对通信框架进行灵活的...

2020-03-08 11:40:08 144

原创 netty(一):IO基础

两组概念:阻塞与非阻塞阻塞与非阻塞是描述进程在访问某个资源时,数据是否准备就绪的一种处理方式。当数据没有准备就绪时:阻塞:线程持续等待资源中数据准备完成,直到返回相应结果。非阻塞:线程直接返回结果,不会持续等待资源准备数据结束后才响应结果。关注的是单个进程的执行状态;不管你这个结果是否准备好,如果准备好这个结果才返回-->阻塞;不管你这个结果是否准备好,先给我一个...

2020-03-07 21:06:52 161

原创 Zookeeper(三):Zookeeper基本概念解析

1、服务器角色:Leader:唯一 在leader宕机后,会选举出新的leader 执行写请求,执行完毕将数据同步给Follower和Observer,同步成功过半认为成功 执行读、写、选举Follower:至少一台 执行读、选举 接收到写请求会转发给LeaderObserver:conf文件中配置:observer可指定服务角色 执行读 接收到写请求会转发给Le...

2020-03-06 22:12:25 119

转载 synchronize的偏向锁,轻量级锁, 重量级锁解析

转载:https://blog.csdn.net/lengxiao1993/article/details/81568130

2020-02-29 15:27:16 124

转载 设计模式(五)----适配器模式

转载:https://blog.csdn.net/wwwdc1012/article/details/82780560

2020-02-28 11:08:38 93

原创 设计模式(四)----装饰模式

定义:在不必改变原类文件和原类使用的继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是用装饰来包裹真实的对象来实现。//抽象对象,公共对象public interface Person { public void eat();}//被装饰对象public class OldPerson implements Person {...

2020-02-28 10:46:34 117

原创 设计模式(三)----代理模式

定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用分类静态代理静态代理就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。//抽象对象public interface UserService { public void getB...

2020-02-26 22:43:40 76

原创 设计模式(二)----工厂模式

定义:工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。分类:简单工厂模式(也叫静态工厂模式) 工厂方法模式(也叫多形性工厂) 抽象工厂模式(也叫工具箱)简单工厂模式实质是由一个工厂...

2020-02-26 22:04:25 229

原创 Java基础(十七):基础类型注意点

float不能用==来比较 public static void main(String[] args) { //反例,浮点数采用“尾数+阶码”的编码方式,类似于科学计数法的“有效数字+指数”的表示方式。二制无法精确表示大部分的十进制小数 float a = 1.0f; float b = 0.9f; float c...

2019-11-26 17:28:19 181

原创 Java基础(十六):maven项目打包

前提:自己建了个maven项目,里面写了一些公共的类,想打包给其他项目用1、在pom.xml中加入打包插件maven-jar-plugin<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</g...

2019-09-22 16:19:21 119

原创 Zookeeper(二):源码下载及idea导入阅读

1、下载源码源码地址:https://github.com/apache/zookeeper2、安装ant(zk源码是使用ant来构建,所以你需要安装ant,并且配置好ant环境进行源码构建编译)3、加压,进入到目录,执行ant eclipse4、如果报错,如下图,修改build.xml将build.xml中的get src="http://download...

2019-09-19 00:13:17 227

原创 Zookeeper(一):linux安装及分布式模拟

1、下载安装包wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz2、解压tar xvzf zookeeper-3.4.13.tar.gzZooKeeper目录结构:bin 存放系统脚本 conf 存放配置文件 contrib...

2019-09-17 23:50:39 141

原创 Java基础(十五):基于LinkedHashMap实现的LRUMap

public class LRUMap<K, V> { private final int MAX_CACHE_SIZE; private final float DEFAULT_LOAD_FACTORY = 0.75f; private LinkedHashMap<K, V> map; public LRUMap(int capac...

2019-09-16 23:50:04 177

原创 Java基础(十四):ThreadLocal使用及源码分析

ThreadLocal:线程本地变量副本。当使用ThreadLocal维护变量时,会为每个使用该变量的线程提供独立的变量副本。每一个线程都可以独立地改变自己的副本,而不会影响其他线程对应的副本。public class ThreadLocalDemo { //初始化变量 private ThreadLocal threadLocal = ThreadLocal.wit...

2019-09-08 19:24:38 292

原创 redis(三):redis缓存更新策略

redis缓存更新分为:内存溢出淘汰策略、过期删除策略、应用方更新一、内存溢出淘汰策略当redis所用内存达到maxmemory时(use_memory>maxmemory),会触发相应的溢出控制策略,具体策略可配根据LRU算法删除设置了超时属性(expire)的键,直到腾出足够空间为止。如果没有可删除的键对象,回退到noeviction策略。maxmemory-policy ...

2019-09-07 23:26:28 426

原创 redis(二):redis的持久化方式

redis持久化方式分为:RDB持久化和AOF持久化一、RDB持久化RBD持久化是把当前进程的数据已快照的形式保存到硬盘的过程。触发分为手动触发和自动触发。手动触发命令:save:阻塞式,内存较大的实例在执行过程中会造成长时间的阻塞,影响主进程上的正常服务请求。 bgsave:fork子进程,RDB持久化的过程在子进程中进行,完成后自动结束进程。阻塞发生在fork阶段,时间...

2019-09-07 23:05:37 148

原创 redis(一):linux中redis安装

1.获取redis资源wget http://download.redis.io/releases/redis-5.0.0.tar.gz如果没有安装wgetyum -y install wget2.解压获取到的资源tar xzvf redis-5.0.0.tar.gz3.安装cd redis-5.0.0make如果提示:提示错误 make: cc: Com...

2019-08-22 23:43:23 84

空空如也

空空如也

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

TA关注的人

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