自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 simdjson 高性能JSON解析C++库

simdjson 是一个用来解析JSON数据的 C++ 库,它使用常用的 SIMD 指令和微并行算法来每秒解析千兆字节的 JSON,在Velox, ClickHouse, Doris 中均有使用。

2024-06-12 20:25:42 1427

原创 Velox Types介绍和源码解析

Velox 支持 scalar(有大小没有方向)类型和复杂类型。标量类型分为一组固定的物理类型和一组可扩展的逻辑类型。物理类型决定数据在内存中的布局。逻辑类型向物理类型添加附加语义。

2024-06-05 19:54:39 996

原创 【Gluten】Spark 的向量化执行引擎框架 Gluten

Gluten 项目主要用于“粘合” Apache Spark 和作为 Backend 的 Native Vectorized Engine。Backend 的选项有很多,目前在 Gluten 项目中已经明确开始支持的有 Velox、Clickhouse 和 Apache Arrow。通过使用Native backend 执行计算,加速 Spark 执行速度,目前在TPCH 测试中使用 velox backend 得到了最多3.6倍加速。下图为 Gluten 整体架构。

2024-04-07 10:25:17 1401

原创 spark 数据序列化和内存调优(翻译)

由于大多数Spark计算的内存性质,Spark程序可能会被集群中的任何资源瓶颈:CPU、网络带宽或内存。大多数情况下,如果数据能放在内存,瓶颈是网络带宽,但有时,您还需要进行一些调整,例如以序列化形式存储RDD,以减少内存使用。本指南将涵盖两个主要主题:数据序列化,这对良好的网络性能至关重要,也可以减少内存使用,以及内存调整。

2024-03-04 14:29:25 1068

原创 [spark] RDD 编程指南(翻译)

从高层次来看,每个 Spark 应用程序都包含一个,该程序运行用户的main方法并在集群上执行各种并行操作。Spark 提供的主要抽象是(RDD),它是跨集群节点分区的元素集合,可以并行操作。RDD 是通过从 Hadoop 文件系统中的文件开始创建的。用户还可以要求 Spark 将 RDD 持久保存在内存中,从而使其能够在并行操作中高效地重用。最后,RDD 会自动从节点故障中恢复。Spark 中提供的第二抽象是,他可以用在并行操作中。

2024-02-28 17:27:23 1138

原创 【ElasticSearch】分片分配策略详解(设计目标&执行策略)

集群由多个节点组成,每个节点上有多个索引Elasticsearch 索引实际上只是一个或多个物理分片的逻辑分组,其中每个分片实际上是一个独立的索引。分片上的段文件是实际存储的数据。分为主、副,索引中主分片的数量在创建索引时是固定的,但副本分片的数量可以随时更改,而不会中断索引或查询操作。一般通过滚动索引的方式加分片(例如ILM)

2024-02-22 13:45:00 1922

原创 应用程序性能分析方法(以ElasticSearch作为例子)

原则:性能调整在距离工作执行的地方越近越好。

2024-02-21 16:17:18 640

原创 [Lucene]核心类和概念介绍

先上一个使用Lucene读写文件的DEMO​​。

2024-02-05 16:20:48 1694

原创 JAVA线程执行中断方式和ElasticSearch未捕获异常的处理方式

Java中只能通过协作的方式取消第一种是通过标志位实现,假设有个计算所有素数的任务,每次计算前检查下是否取消的标志位,如果为true则退出计算。调用方想要取消任务的话,则将标志位设为true。但这种方法无法再计算的过程中取消任务,像是一些阻塞调用无法被取消第二种是中断,用于通过协作机制停止线程继续执行任务,原理是向进程发送中断请求将标记线程为Interrupted,线程会在下一个合适的时刻停止运行,阻塞的库方法例如都会响应中断,抛出意味着阻塞操作因为中断结束,但不能保证响应速度。

2024-01-30 21:00:00 1275

原创 Java Garbage First(G1)垃圾回收器介绍及与CMS对比

在G1之前的其他收集器进行收集的范围都是整个新生代或者老年代,而G1不再是这样。在堆的结构设计时,G1打破了以往将收集范围固定在新生代或老年代的模式,G1将堆分成许多相同大小的区域单元,每个单元称为Region,Region是一块地址连续的内存空间,并且新生代和老年代的大小也不是固定的了可以根据需要扮演eden suvivor 或者 old。还有一个humongous区存储大对象。

2024-01-25 15:30:55 950

原创 【ElasticSearch】 ElasticSearch serverless架构介绍(查询写入分离,计算存储分离)

ElasticSearch 推出了全新的serverless架构,将查询(search)和写入(indexing)分离,将计算(computing)和存储(storage)分离,极大提高了 ES 的可运维性,降低了学习成本。本文将先介绍下serverless含义,再介绍ElasticSearch serverless架构。

2024-01-23 10:55:19 1743

原创 【Elasticsearch】索引恢复(recovery)流程梳理之副本分片数据恢复

因为replica恢复时的phase2阶段既有新写入的replication,也有回放的doc,此时如果针对doc 1有两个更新操作,第一个在回放的操作中,第二个在新的replication,然后replica先执行了replication再执行回放会导致数据不一致,ES通过校验version来解决这个问题,第一个操作的version小于第二个操作,因此即使第一个操作后到达也会被拒绝。

2024-01-17 15:05:02 1320

原创 【Elasticsearch】索引恢复(recovery)流程梳理之EXISTING_STORE索引数据恢复

总流程比较简单,主要是读取本地索引文件的元数据和从translog恢复数据,基于cluster state变更的时间触发,完成时在触发shard started的更新集群状态的请求ES利用recovery流程完成了新建分片的相关物理文件的创建工作。

2024-01-12 19:02:54 1460

原创 【Elasticsearch】存在数据的分片分配流程梳理

allocation使用allocator和deciders进行节点选择,allocator负责整个流程会找出哪些节点可以分配,deciders通过多个decider判断该节点能否分配

2024-01-08 10:46:36 879

原创 【Elasticsearch】awareness 配置导致分片无法迁移问题排查

现在要进行机房(rack)迁移,ES集群共有三个节点,开启了awareness allocation对应的attribute为rack(机房),集群中的所有节点都在同一个机房(历史遗留,理论上因为只有一个机房,所以该配置无意义)。进行机房迁移的操作是扩容了三个节点并将之前的三个节点exclude,但发现有部分分片无法迁移。

2024-01-02 19:08:56 906

原创 【ElasticSearch】索引数据mapping嵌套深度过大导致Stackoverflow问题排查

集群所有数据节点频繁因为StackOverflowError的错误挂掉,启动后还会挂掉,StackOverflowError异常栈如下。

2023-12-28 22:00:00 1018

原创 【ElasticSearch】集群元数据(cluster state)广播流程梳理

整体流程和raft共识算法中的cluster membership change过程类似,使用中间状态last accepted configuration & commited configuration的中间状态(也就是raft中的C(new, old))解决脑裂问题,状态分为三个阶段整体流程是标准的两阶段提交,和raft共识算法中的log replication类似;分为Publish和Commit两个阶段。

2023-12-17 10:00:00 97

原创 【ElasticSearch】写入流程容错(fault tolerence)策略分析梳理

在分布式系统中,容错(fault tolerence)一直都是系统的主要设计目标,ElasticSearch既是分布式查询系统也是分布式存储系统。今天我们来分析和梳理一下写入流程容错策略

2023-12-05 16:34:21 58

原创 【ElasticSearch】ElasticSearch节点可用机器内存减少后写入性能下降问题排查

ElasticSearch节点所在机器部署了其他服务后,ElasticSearch的写入性能下降了。使用cgroup隔离了ES进程和其他服务的CPU,服务部署后ElasticSearch节点可用机器内存减少了一半以上。

2023-11-25 09:45:00 75

原创 【ElasticSearch】_cat/nodes接口影响集群写入性能问题排查及修复

当集群分片数达到140K以上时,ES的_cat/nodes被调用后协调节点出现写入性能下降的问题。

2023-11-22 12:27:05 333

原创 【ElasticSearch】TCP keep-alive机制与ElasticSearch的keep-alive机制

TCP keepalives可以在客户端或服务端的应用层开启,开启后进程会定时发送报文来检测对端是否崩溃,崩溃则关闭连接。使用上keep alive的一个场景如下:A和B通过三次握手建立连接,然后拔掉B服务器的电源,这时B没有机会去发送连接关闭的请求,然后B服务器重启,这时对于A来说连接是健康的,但B不知道这个连接,当A发送请求时会失败该功能在应用层开启,默认配置在操作系统层,linux的示例如下。

2023-11-21 09:15:00 1101 1

原创 【ElasticSearch】ES集群启动时master内存打满问题排查

整个集群重启时,master节点无响应,堆内存使用率100%,集群无法启动。

2023-11-20 13:59:10 355 1

原创 ES集群状态为红色但没有处于Unassigned状态的主分片问题排查

集群启动时,集群状态为红色,没有处于Unassigned状态的主分片。冲突点:官方文档中描述红色代表集群中有主分片处于Unassigned状态,但集群中并没有主分片处于Unassigned状态,却为红色。原文如下。

2023-11-20 13:47:16 251 1

原创 ElasticSearch客户端迁移到Rest Client后,ElasticSearch节点内存打满问题排查

ElasticSearch客户端迁移到Rest Client后,ElasticSearch节点内存打满问题排查.ES服务端的Netty4CorsHandler发生了内存泄漏

2023-09-08 11:26:23 242 1

原创 集群qorum数量master-eligible节点掉线解决方法

集群qorum数量master-eligible节点掉线(宕机)解决方法

2022-06-11 20:41:05 523 1

原创 kafka sticky partitioner介绍及java和c++ librdkafka代码示例

kafka当前2.4.0合入的一个KIP-480,它的核心逻辑就是当存在无key的序列消息时,我们消息发送的分区优先保持粘连,如果当前分区下的batch已经满了或者 linger.ms延迟时间已到开始发送,就会重新启动一个新的分区...

2021-08-11 08:36:22 461

原创 非暴力沟通

**观察感受需要请求避免使用抽象的语言表达请求,借助具体的描述,方便他人理解并知道如何去做。自己表达的意思可能和他人理解的有出入,所以需要请求他人的反馈。当然反过来也是一样的,听完他人的请求或表述后,最好复述一下表明自己的理解是怎样的。如果他人觉得不顺从我们请求就会得到责备便会觉得我们的请求是命令,产生抵触心理。要在请求时表明我们并非强人所难,并带上敬语”帮忙“之类的。尊重每个人的需要和选择。**...

2021-03-21 12:48:34 137 1

原创 关于《未来简史》书后三个问题的思考和我的答案

**1.生物真的只是算法,而生命也真的只是数据处理吗?**如果说生物就是算法的话,那么海马体就好比电脑的硬盘但比现在的硬盘小的可怜,但查找却要快的多;额叶就好比CPU能进行逻辑推理沟通管理;枕叶就相当于GPU用来进行图像处理;眼睛、鼻子、耳朵用来进行输入数据的接收,就好比鼠标和键盘;电脑用显示屏、输出端口来进行数据的输出相当于人的语言和动作。但人的意识和想象产生目前还没有研究明白,也没有哪一台超级计算机能够拥有意识,生物只是算法这一命题还有待商榷,如果未来科学家研究明白意识也是算法,那么人也是地球上最

2021-01-28 20:21:32 537

原创 java设计模式之观察者模式在kafka client consumer中的使用

观察者模式: 定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,依赖他的对象收到通知并自动更新。类图解析: 在类图中Subject为被观察者,Observer为观察者。被观察者的attach方法用来添加观察者,notify方法通知观察者;观察者的update方法当被观察者notify是调用。源码逻辑: 在Kafka client consumer端request相关的部分源码中,也体现了观察者模式。大致逻辑是这样的,consumer想要消费kafka broker中的数据需要发送request,

2020-12-28 10:42:48 765

原创 设计模式之模板方法模式在kafka DelayedOperation中的应用

**模板方法模式定义:**定义一个操作中的算法框架,而将一些步骤延迟到子类当中实现,使得一个子类可以不改变算法结构而重定义该算法某些具体的步骤。DelayedOperation: DelayedOperation是Kafka延迟任务部分代码中延迟任务的抽象基类。延迟操作用来实现Kafka中的一些特殊场景,例如在ack=all的情况下生产者向broker发送数据,由于数据需要在replica中进行同步,所以broker向生产者发送response需要延迟执行,这便是一个延迟操作。DelayedOperat

2020-12-14 11:33:09 112

原创 java基于线程停止服务,“致命药丸”在kafka 源码服务端请求处理中的使用

致命药丸:一个可识别的对象,置于队列中意味着当你得到他的时候,停止一切服务,在先进先出队列中致命药丸可以保证之前的请求都被处理完毕,生产者不应该在提交致命药丸之后提交任何工作。kafka服务端请求处理的大体流程:Acceptor线程接受客户端的请求并建立socket channel,然后将channel分发给Processor线程,Processor 线程消费阻塞队列中的socket channel并与之建立连接接受request,再将request放到request channel当中,之后KafkaR

2020-11-26 15:15:47 103

原创 JAVA CountDownLatch(闭锁)在kafka SocketServer源码中的应用

首先介绍下CountDownLatch,CountDownLatch是一个灵活的闭锁实现,可用于以下三种情况确保一个计算不会执行,直到他需要的资源被初始化确保一个服务不会开始,直到依赖的其他服务都已就绪等待直到活动的所有部分都为继续处理作好准备CountDownLatch的状态包括一个计数器初始化为一个正数,countDown方法对计数器做减操作,await方法(阻塞)等待计数器达到零,或者线程中断以及超时。Kafka AbstractServerThread类源码:private[kafk

2020-11-26 09:51:29 208

原创 2021届找实习面试总结

大概三月中旬才知道春招需要找实习当时慌急了什么都没准备,准备先投个蘑菇街试试,然后简历直接被挂(没有项目),不敢投了。后来开始边上课边看书,刷剑指offer,直到4月才大概看完面试需要的相关知识,开始投简历。拿到的offer:字节跳动,美团笔试后没消息的:快手(hc满了)一面挂的:阿里(笔试0AC),作业帮,招商银行、便利蜂现在还没消息的:360、微众银行总结1.大厂重基础,各种底层原...

2020-05-06 21:10:19 286

原创 2020字节跳动数据研发实习生三面面经(已offer)

1. 一面自我介绍项目相关kafka如何保持一致性offset存储在哪在kafka0.11版本之前offset存储在哪kafka数据文件是如何存储的mysql的事务级别默认的级别是什么mapreduce的过程map阶段如何划分在10亿个数中进行查找数字(利用bitmap)爬楼梯问题(动态规划)2. 二面自我介绍项目相关YARN任务提交流程YARN有哪些组件JVM...

2020-04-18 19:40:44 2119

原创 360数据研发实习生一面面经(2020)

自我介绍为什么选择就业?讲讲hadoop生态说一下mapreduce整体过程map端的排序和reduce端的排序有什么区别?环形缓冲区的大小相关因素有什么项目相关手撕算法题(买股票最大收益,具体记不清了)口撕算法题(如何不用额外空间确定一个单向链表是否为回文)我的问题...

2020-04-09 10:26:07 171

原创 SQL优化_数据库_提高表的查询效率

创建表时能使用数值型的尽量不用字符型,因为字符型比较需要逐个char进行比较,而数值型只需要比较一次。对于经常查询的字段建立索引,索引能够提升查询效率,但会占用一部分空间,同时在进行insert、update操作时效率也会变低。in可能会使索引失效,所以尽量不使用in用between代替,如果查询有多个条件把in放在最后,因为如果in使索引失效了后面的查询字段也用不了索引。<>...

2020-03-21 10:22:09 437

原创 整和Flume + Kfaka + Storm + HBase通过Storm对接Kafka不同级别日志的Topic,实时统计不同级别日志数量最终结果输出到HBase

解决方案:1 通过storm集成kafka依赖,实例化TridentKafkaConfig连接kafka并开启四个线程分别订阅相应日志主题。2.通过trident编写topology,第一个bolt确定该条日志的level并发射,再利用groupBy将所有batch分到一组,再通过Count计算出日志条数。3.通过hbase api将计算出的条数和等级写到hbase中。Maven依赖(st...

2020-03-18 20:36:58 194

原创 整合Flume+Kafka,把Flume采集不同级别的日志分别生产到Kafka 不同的Topic中

解决方案:1.flume端使用taildir source读取日志,利用interceptor给日志加上头信息key为topic,value为对应日志的主题,使用kafka sink输出到kafka2.kafka端建立四个topic 分别对应hive日志的四个级别,通过java编写consumer由于info日志要有三个consumer消费,所以可以通过给info主题设置三个分区三个consu...

2020-03-18 20:27:22 998

原创 Flume读取Hive日志,把日志按照不同文件夹、日志级别日期进行区分,并输出到HDFS中

解决方案:1.使用taildir source读取hive日志。2.自定义intercepter,由于一段hive日志只有第一行有时间戳和日志级别信息,将日期和日志级别信息存储到第一行所在的Event的header里,再通过拦截器将后几行的内容归并到第一行所在的event的body里。3.通过hdfs sink从header中取出时间戳和日志类型信息,将日志输出到对应的hdfs目录。flu...

2020-03-18 20:12:20 631

空空如也

空空如也

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

TA关注的人

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