自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

犀牛饲养员

Growing up in pain, they are normal. Pretending to fit in, they are people.

原创 给你总结几个ES下最容易踩的坑
原力计划

我本人接触Elasticsearch(一下简称ES)有挺长一段时间了,本文结合自己的一些项目经验,给你总结几个实际项目中比较容易踩到的坑。希望读者能够避免犯这样的错误。 坑一,时区问题 在我们的项目中,索引下一般都会存在一个时间的字段,这个字段可以用来排序,或者做时间范围查询,或者聚合的场景等都会...

2020-05-30 19:43:16 600 4

原创 ES系列之利用filter让你的查询效率飞起来

bool查询简介 Elasticsearch(下面简称ES)中的bool查询在业务中使用也是比较多的。在一些非实时的分页查询,导出的场景,我们经常使用bool查询组合各种查询条件。 Bool查询包括四种子句, must filter should must_not 我这里只介绍下must和fi...

2020-05-11 20:53:44 1593 4

原创 什么鬼?ES主分片和副本大小居然不一样!

引言 很多认为Elasticsearch(以下简称ES),同一个分片的主分片和副本分片文档数量肯定是样的,数据大小也是一样的。 这个其实值说对了一半,文档数量是一阳台的没错,但是数据大小不一定一样。 产生这种现象的原因在于,主分片和副本分片的segment数量可能不一样。 正文 我们来看个示例。 ...

2020-05-05 17:38:00 197 0

原创 再聊聊fastjson的一个漏洞
原力计划

引言 我曾经写过一篇文章 fastjson远程代码执行漏洞问题分析 文章曾经比较详细分析了fastjson在1.2.24以及之前版本存在远程代码执行高危安全漏洞的问题。 本文则是针对另一个漏洞的介绍和分析。 官方对这次漏洞的说明是这样的: 近日,阿里云应急响应中心监测到fastjson爆出远程拒...

2020-05-03 22:37:04 243 4

原创 关于kibana的可视化可能都在这篇文章里了
原力计划

引言 kibana是elasticsearch(以下简称ES)的可视化平台,笔者平时使用kibana的dev tools比较多,在这里可以更便捷的使用ES的各种命令,DSL查询语句等。 但是kibana的可视化功能远不止于次。Kibana可以用来搜索,查看ES索引中的数据,可以轻松地进行高级数据分...

2020-05-02 20:17:22 895 1

原创 ES分页看这篇就够了
原力计划

文章目录引言分页的几种方案from/size方案search after方案scroll api方案总结 引言 我们使用mysql的时候经常遇到分页查询的场景,在mysql中使用limit关键字来实现分页。比如下面的示例。 select * from orders_history where ty...

2020-04-12 23:01:18 227 2

原创 ES系列之原来查看文档数量有这么多姿势
原力计划

1、引言 有人可能觉得,查看文档数量不是很简单吗?直接 GET /_cat/count/index_name?v 不就可以了吗。 事实上远不止这么简单,比如嵌套文档的情况等。相信你看了我这篇文章之后你会感叹原来统计文档有这么多讲究啊。 2、正文 cat/count 首先是最常用的的方式,也是一种...

2020-04-03 20:14:27 1273 5

原创 ES系列之嵌套文档和父子文档
原力计划

需求背景 很多时候mysql的表之间是一对多的关系,比如订单表和商品表。一笔订单可以包含多个商品。他们的关系如下图所示。 ElasticsSearch(以下简称ES)处理这种关系虽然不是特别擅长(相对于关系型数据库),因为ES和大多数 NoSQL 数据库类似,是扁平化的存储结构。索引是独立文档的...

2020-03-26 19:45:47 595 4

原创 ES系列之一文带你避开日期类型存在的坑
原力计划

ES系列之一文带你避开日期类型存在的坑 概述 时间相关的字段是ElasticsSearch(以下简称ES)最常用的字段了,几乎所有的索引应用场景都会有时间字段,一般用于基于时间范围的搜索,聚合等场景。但是由于时区的问题,相信很多小伙伴都踩到过时间字段的坑,笔者自己就踩过。 本文希望给你提供一个避坑...

2020-03-19 00:07:28 926 1

原创 ES系列之原来ES的聚合统计不准确啊

本篇文章不是讲ElasticSearch(下面简称ES)聚合分析的基本概念和用法的,这些网上的资料很多,不清楚的可以自行查阅。 我下面聚合分析使用的数据都是kibana自带的,这样方便有些读者实际测试文中的示例。 基本概念 ES为了满足搜索的实时性,在聚合分析的一些场景会通过损失精准度的方式加快结...

2020-03-15 21:41:20 723 1

原创 Elasticsearch对比TiDB

笔者做过的一个项目中,同时用到了Elasticsearch和Tidb两种存储相关的产品。这两者适用的场景有些差异,但其实又有交集。前者偏向搜索,后者则主打分布式存储。下面根据自己的理解从不同维度分析下二者的相同点和不同点。 对比维度 Elasticsearch TiDB 产地 公司...

2020-03-08 15:40:52 482 1

原创 fastjson远程代码执行漏洞问题分析

背景 fastjson远程代码执行安全漏洞(以下简称RCE漏洞),最早是官方在2017年3月份发出的声明, security_update_20170315 没错,强如阿里这样的公司也会有漏洞。代码是人写的,有漏洞是难免的。关键是及时的修复。 声明中,官方指出: 最近发现fastjson在1....

2020-03-01 16:15:11 488 0

原创 带你了解下Kafka的客户端缓冲池技术

最近看kafka源码,着实被它的客户端缓冲池技术优雅到了。忍不住要写篇文章赞美一下(哈哈)。 注:本文用到的源码来自kafka2.2.2版本。 背景 当我们应用程序调用kafka客户端 producer发送消息的时候,在kafka客户端内部,会把属于同一个topic分区的消息先汇总起来,形成一个b...

2020-02-18 16:28:34 310 0

原创 数据库连接池的原理没你想得这么复杂

背景介绍 数据库连接池和线程池等池技术存在的意义都是为了解决资源的重复利用问题。在计算机里,创建一个新的资源往往开销是非常大的。而池技术可以统一分配,管理某一类资源,它允许我们的程序可以重复的使用这个资源,只有在极端情况下(比如连接池满)才会创建新的资源。 数据库连接这种资源尤其昂贵,它的创建开销...

2020-02-16 09:58:50 163 0

原创 你真的会用volatile吗

文章目录volatile的概念volatile详解什么时候需要使用volatilevolatile在标准库里的应用volatile会降低程序执行的效率volatile不是万能的 volatile的概念 或者说,volatile解决什么问题? 我自己的总结:volatile解决多线程下变量访问的内存...

2020-02-09 20:58:37 1408 0

原创 你真的了解LinkedBlockingQueue的put,add和offer的区别吗

概述 LinkedBlockingQueue的put,add和offer这三个方法功能很相似,都是往队列尾部添加一个元素。既然都是同样的功能,为啥要有有三个方法呢? 这三个方法的区别在于: put方法添加元素,如果队列已满,会阻塞直到有空间可以放 add方法在添加元素的时候,若超出了度列的长度会...

2020-02-08 13:02:53 156 0

原创 mac环境使用Apache ab工具测试服务性能

基本概念 先引用一段官方介绍, ab is a tool for benchmarking your Apache Hypertext Transfer Protocol (HTTP) server. It is designed to give you an impression of how...

2020-02-03 21:57:57 419 0

原创 一文带你彻底弄懂ES中的doc_values和fielddata

基本概念 这两个概念比较像,所以大部分时候会放在一起说。 这两个概念源于Elasticsearch(后面简称ES)除了强大的搜索功能外,还可以支持排序,聚合之类的操作。搜索需要用到倒排索引,而排序和聚合则需要使用 “正排索引”。说白了就是一句话,倒排索引的优势在于查找包含某个项的文档,而反过来确定...

2020-02-01 16:30:02 883 0

原创 kafka的一些常用工具

文章目录环境工具新建topic查看topic列表删除某个topic查看有哪些消费组查看某个消费组的详情 环境 以下的操作都是基于kafka_2.11-2.2.0 工具 新建topic bin/kafka-topics.sh --create --zookeeper 127.0.0.1:2181 -...

2020-01-29 21:26:54 278 0

原创 关于Java使用groupingBy分组数据乱序问题

这是对最近做的一个项目,其中一个知识点的总结。 真实的业务场景就不说了,我来模拟下业务场景,足够说明问题就行了。 假设我有个对象,存储人员的基本信息,如下: @AllArgsConstructor @Data @ToString public class PersonInfo { priv...

2020-01-28 11:14:36 160 0

原创 springboot整合kafka自动提交的问题

文章目录环境准备问题描述源码分析 最近遇到一个springboot整合kafka设置手动提交不生效的问题,后来发现是自己的方法不对,走了一些弯路,这里记录一下。 环境准备 spring boot 2.1.6.RELEASE 本地zk, 单节点kafka,版本是kafka_2.11-2.2.0 ...

2020-01-26 20:11:11 285 0

原创 详解 java CompletableFuture

文章目录背景知识基本介绍使用示例总结 背景知识 要理解 CompletableFuture,首先要弄懂什么是 Future。因为后者是前者的扩展。本文并不打算详细的介绍 Future,毕竟不是本文的重点。 Future是java1.5增加的一个接口,提供了一种异步并行计算的能力。比如说主线程需要执...

2020-01-25 22:43:49 165 0

原创 从一个问题来加深对mysql可重复读的理解

引入问题 这个问题来源于一个网络课程的课后思考题,题目是这样的: 我用下面的表结构和初始化语句作为试验环境,事务隔离级别是可重复读。现在,我要把所有“字段 c 和 id 值相等的行”的 c 值清零,但是却发现了一 个“诡异”的、改不掉的情况。请你构造出这种情况,并说明其原理。 my...

2020-01-17 17:46:21 168 0

原创 Elasticsearch java API客户端介绍

基本上官方指南就已经向我们说明了一切。如下图所示: 从官方指南上,ES的java 客户端分为两个大类。分别是: Java REST Client Java API 下面分别说下这两种有什么区别。 Java API 在ES 7.0之前最常采用的API,基于TransportClient客户端。...

2019-12-23 19:32:16 136 0

原创 dubbo服务接口设计的几个建议

文章目录尽量不用独立的多个参数接口最好带有版本信息尽量少用枚举类型作为参数总结 尽量不用独立的多个参数 比如我们有个dubbo的服务接口是这样定义的, public interface UserService { String sayHello1(String name); } ...

2019-12-18 09:43:16 69 0

原创 使用kafka连接器迁移mysql数据到ElasticSearch

文章目录概述过程详解准备连接器工具数据库和ES环境准备配置连接器启动测试 概述 把 mysql 的数据迁移到 es 有很多方式,比如直接用 es 官方推荐的 logstash 工具,或者监听 mysql 的 binlog 进行同步,可以结合一些开源的工具比如阿里的 canal。 这里打算详细...

2019-12-10 20:23:02 182 0

原创 这可能是讲雪花算法最全的文章

文章目录雪花算法的起源雪花算法原理雪花算法java实现一些细节讨论调整比特位分布workerid一般如何生成 雪花算法的起源 snowflake中文的意思是 雪花,雪片,所以翻译成雪花算法。它最早是twitter内部使用的分布式环境下的唯一ID生成算法。在2014年开源。开源的版本由scala编写...

2019-12-04 08:36:48 150 0

原创 通过一个示例了解kafka connect连接器

什么是kafka连接器connect 在实际工作中使用 kafka ,有时候会有类似这样的场景。我们需要把某些数据源的数据导入到 kafka,或者把 kafka 作为数据源导出数据。或者两种场景的需求都要。 这算是一种 kafka 生产者,消费者模式的特殊使用场景。它主要服务于数据管道的场景,为此...

2019-11-20 08:30:43 305 0

转载 阿里云Elasticsearch性能优化实践

Elasticsearch是一款流行的分布式开源搜索和数据分析引擎,具备高性能、易扩展、容错性强等特点。它强化了Apache Lucene的搜索能力,把掌控海量数据索引和查询的方式提升到一个新的层次。本文结合开源社区和阿里云平台的实践经验,探讨如何调优Elasticsearch的性能提高索引和查询...

2019-11-19 08:54:39 114 0

原创 带你了解控制线程执行顺序的几种方法

通常情况下,线程的执行顺序都是随机的,哪个获取到CPU的时间片,哪个就获得执行的机会。不过实际的项目中有时我们会有需要不同的线程顺序执行的需求。借助一些java中的线程阻塞和同步机制,我们往往也可以控制多个线程的执行顺序。 方法有很多种,本篇文章介绍几种常用的。 利用 thread join实...

2019-11-15 19:31:35 102 0

原创 一文说透访问者模式

基本介绍 究竟什么是访问者模式呢? 访问者模式(Visitor Pattern)模式是行为型(Behavioral)设计模式,提供一个作用于某种对象结构上的各元素的操作方式,可以使我们在不改变元素结构的前提下,定义作用于元素的新操作。 如果系统的数据结构是比较稳定的,但其操作(算法)是易于变化的...

2019-11-11 18:15:01 46 0

原创 从一个生产上的错误看kafka的消费再均衡问题

文章目录问题描述问题的分析kafka的topic分区心跳机制kafka的分区再均衡解决问题 问题描述 项目在生产上的一段错误日志如下, [commitSync] processed message to kafka failed, Just Ignore this commit, wait for...

2019-11-08 23:27:45 83 0

原创 map和object相互转换的几种方法和对比

工作中经常遇到这样的场景,需要在object和map直接相互转换,这里总结一下。 我先定义一个实体类,后面介绍的几种转换方法都以这个实体类为例进行说明。 public class PersonBean { private String name; //姓名 private Inte...

2019-11-06 17:03:43 574 0

原创 如何优雅的判断一个对象的属性是否全部为空

有一些业务场景下,我们需要判断某个对象的属性是否全部为空。该怎么做呢? 马上能想到的一个方案是,一个一个判断对象中的属性。这个倒也可以,但是如果要判断的对象比较多,就得给每个对象写一个判断方法(因为每个对象的属性都不一样)。 其实我们可以利用 java 的反射机制,比较优雅的实现。代码其实也很简单...

2019-11-02 23:11:44 1391 0

原创 什么鬼,java线上内存溢出了?试试这个神器

MAT工具介绍 工欲善其事必先利其器,学会使用工具也是一种本领。本篇文章就把自己之前工作中用到的一个内存分析工具给大家介绍下。 内存分析工具MAT(Memory Analyzer Tool)是一款 JVM 的内存分析工具,在实际的工作中可以帮助我们解决生成上内存占用过高等问题。 我之前用 M...

2019-10-29 12:46:38 63 0

原创 如何打印GC日志排查问题

在工作当中,有时候我们会需要打印GC的相关信息来定位问题。该如何做呢? 先来看个示例, public static void main(String[] args) { List<Integer> list0 = new ArrayList<>(); ...

2019-10-26 16:27:37 458 0

原创 springboot多数据源配置和使用

文章目录yml配置数据源config配置类mybatis接口和实现测试多数据源下的事务问题 yml配置数据源 这个直接把多个数据库连接信息写上即可,用spring.datasource属性进行配置,如下: spring: profiles: dev datasource: test...

2019-10-25 18:54:49 182 0

原创 天呐,经常用的sudo居然有漏洞?

这两天看到一个新闻让我很是震惊,linux上最常用的命令之一, sudo 命令居然被爆出有安全漏洞。作为一个程序员,可以说几乎天天和这个命令打交道,哪能想到这么成熟的命令工具居然隐藏着安全漏洞。 sudo介绍 大部分开发运维对这个命令都非常熟悉,不过考虑到有效读者不了解我还是简单介绍下。 sudo...

2019-10-21 18:21:00 349 0

原创 生产上遇到的一例mycat读写分离延时问题

问题描述 场景是这样的,我们的支付系统在一笔支付完成后,需要发出通知给到商户。支付完成的消息通过消息队列发送给通知的服务。通知服务的有一部分处理逻辑是这样的: notifyPersist.saveNotifyRecord(notifyRecord); ...

2019-10-12 11:04:07 87 0

原创 kafka系列之camel-kafka

文章目录概述详解camel-kafka 概述 首先关于 camel 的基本概念和用法,以及 kafka 的基本概念和用法,这里就不啰嗦了。这篇文章假设你对二者都有基本的认识。 camel 本身是一个路由引擎,通过 camel 你可以定义路由规则,指定从哪里(源)接收消息,如何处理这些消息,以及发往...

2019-10-01 20:43:38 741 0

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