9 LittleMagics

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 17w+

稀疏索引与其在Kafka、ClickHouse中的应用

Sparse Index在以数据库为代表的存储系统中,索引(index)是一种附加于原始数据之上的数据结构,能够通过减少磁盘访问来提升查询速度,与现实中的书籍目录异曲同工。索引通常包含两部分,即索引键(≈章节)与指向原始数据的指针(≈页码),如下图所示。https://www.geeksforgeeks.org/indexing-in-databases-set-1/索引的组织形...

2020-07-08 23:27:58

浅谈装饰模式及其在JDK、Flink中的应用

前言上周末在家翻看之前写的部分文章,发现在设计模式方面甚少涉猎。在阅读开源项目源码的过程中,我们经常会接触到各种设计模式,深入理解它们无疑大有裨益,能够帮助我们快速get到那些masterminds背后的思想。今天就来谈一谈应用较为广泛的装饰模式。装饰模式与四要素所谓装饰模式(decorator pattern),就是在不改变原有类,也不影响其他继承自该类的子类的行为的基础上,为原有类在运...

2020-07-06 21:27:05

基于ClickHouse的用户行为(路径)分析实践

前言ClickHouse为用户提供了丰富的多参聚合函数(parametric aggregate function)和基于数组+Lambda表达式的高阶函数(higher-order function),将它们灵活使用可以达到魔法般的效果。在我们的体系中,ClickHouse定位点击流数仓,所以下面举几个用它来做用户行为(路径)分析的实战例子,包括:路径匹配智能路径检测有序漏斗转化用户...

2020-07-03 20:57:31

深入分析Flink的operator chain(算子链)机制

前言这篇是昨晚没写完的,今晚补全发出来。Flink算子链简介“为什么我的Flink作业Web UI中只显示出了一个框,并且Records Sent和Records Received指标都是0?是我的程序写得有问题吗?”笔者在Flink社区群里经常能看到类似这样的疑问。这种情况几乎都不是程序有问题,而是因为Flink的operator chain——即算子链机制导致的,即提交的作业的执行...

2020-07-01 20:28:25

浅谈HDFS的fsimage、edit log与SecondaryNameNode

前言HDFS SecondaryNameNode是干什么的?这是道经典的基础面试题,笔者问过面试者很多次(当然也被面试官问过很多次)。从印象看,大约有一半的被面试者无法正确作答,给出的答案甚至有“不就是NameNode的热备嘛”。本文来简单聊聊相关的知识,为节省篇幅,将SecondaryNameNode简称SNN,NameNode简称NN。NN与fsimage、edit log文件NN...

2020-06-29 23:25:05

求解最长回文子串的中心扩展法与Manacher算法

端午安康~好久没写算法类文章了。这个假期出行计划泡了汤,没太多事情做,随便搞一篇吧。最长回文子串所谓最长回文子串(longest palindromic substring, LPS),顾名思义就是指一个字符串中,长度最大且又满足回文性质的连续子串。例如:"bananas"的最长回文子串是"anana","麻麻说上海自来水来自海上"的最长回文子串是"上海自来水来自海上"。求解...

2020-06-25 23:01:35

利用Grafana与系统表监控ClickHouse查询

前言我们往往需要关心数据库的查询执行情况,特别是慢查询。本文简述配置ClickHouse查询监控的一种傻瓜方法。开启查询日志打开各个ClickHouse实例的users.xml,在当前使用的profile(如default)中加入:<log_queries>1</log_queries>再去各个ClickHouse实例的config.xml中检查一下查询日志的配...

2020-06-24 13:58:10

JVM工具命令之jstat小结

jstat今日六一八,事情多的很,正好适合写流水账总结。之前已经分别讲过了JVM提供的jstack、jmap工具的用法,今天简单说说jstat吧。jstat命令的格式如下。# jstat -helpUsage: jstat -help|-options jstat -<option> [-t] [-h<lines>] <vmid> [&lt...

2020-06-18 22:52:19

利用InfluxDB+Grafana搭建Flink on YARN作业监控大屏

前言虽然笔者之前写过基于Prometheus PushGateway搭建Flink监控的过程,但是在我们的生产环境中,使用的是InfluxDB。InfluxDB是一个由Go语言写成的、由InfluxData部分开源的时序数据库,能够非常好地处理监控指标的存储和查询,配合Grafana即可简单地实现Flink作业metrics的收集与展示。本文简述配置过程及一些小问题。硬件参数新版Influx...

2020-06-17 23:42:04

谈谈Flink DataStream API中的三种双流join操作

前言本文是基础中的基础,看官可以放心食用。在数据库中的静态表上做OLAP分析时,两表join是非常常见的操作。同理,在流式处理作业中,有时也需要在两条流上做join以获得更丰富的信息。Flink DataStream API为用户提供了3个算子来实现双流join,分别是:join()coGroup()intervalJoin()本文举例说明它们的使用方法,顺便聊聊比较特殊的inte...

2020-06-15 22:07:19

浅谈分布式系统脑裂现象与ZK、HDFS的避免方案

脑裂的概念与成因"split brain"原本是指医学中的“裂脑综合征”,即连接大脑左右半球的胼胝体受损到一定程度后发生的症状。左右脑分离后,会分别处理知觉、形成概念和对刺激产生反应,相当于有两个脑在一个身体运作,会造成患者行为的冲突。例如:当一个裂脑患者更衣时,他有时会一只手将裤子拉起,却另一只手将裤子往下脱。当一个影像只投射在裂脑患者的左视觉区,他无法说出看见了什么——因为左视觉区的影...

2020-06-13 23:43:40

配置YARN集群重启时的作业自动恢复

前言我们知道,Hadoop YARN的基础架构由ResourceManager实例和NodeManager实例组成。用户提交到YARN集群的作业会抽象成ApplicationMaster和Container的形式,并由NodeManager持有和管理,如下图所示。问题来了:如果YARN集群整体重启,是不是就意味着所有作业都被强行停止,需要用户手动恢复呢?当然不是,通过适当的配置,...

2020-06-11 22:57:40

ClickHouse技术分享第二弹(英文讲义)

前言以下是今天为公司小伙伴们做的ClickHouse技术分享的讲义。由于PPT太难做了,索性直接用Markdown来写,搭配Chrome上的Markdown Preview Plus插件来渲染,效果非常好。以下全文奉上,浓缩的都是精华,包含之前写过的两篇文章《物化视图简介与ClickHouse中的应用示例》和《ClickHouse Better Practices》中的全部内容,另外也包含一些...

2020-06-10 21:55:56

Flink链路延迟监控的LatencyMarker机制实现

前言今天本应放一首适合高考气氛的歌的,但是既然受疫情影响推迟了,还是老老实实写点技术相关的吧。对于实时的流式处理系统来说,我们需要关注数据输入、计算和输出的及时性,所以处理延迟是一个比较重要的监控指标,特别是在数据量大或者软硬件条件不佳的环境下。Flink早在FLINK-3660就为用户提供了开箱即用的链路延迟监控功能,只需要配置好metrics.latency.interval参数,再观察T...

2020-06-07 17:16:02

聊聊Java的关闭钩子(shutdown hook)

这几天忙到飞起,加上简书被请去喝了两天茶,还是写篇炒鸡容易的吧。在Java程序退出时——尤其是非正常退出时,我们可能需要先执行一些善后工作,如关闭线程池、连接池、文件句柄等,即所谓“优雅停机”(graceful shutdown)。如何保证善后工作的代码能够被执行到呢?Java为用户提供了关闭钩子(shutdown hook),它在以下情景都会被调用:程序正常退出,即最后一个非守护线程结束时...

2020-06-06 21:16:41

ClickHouse Better Practices

前言经过一个月的调研和快速试错,我们的ClickHouse集群已经正式投入生产环境,在此过程中总结出了部分有用的经验,现记录如下。看官可去粗取精,按照自己项目中的实际情况采纳之。(版本为19.16.14.65)因为我们引入ClickHouse的时间并不算长,还有很多要探索的,因此不敢妄称“最佳实践”,还是叫做“更佳实践”比较好吧。表相关事项数据类型建表时能用数值型或日期时间型表示的字段...

2020-05-31 22:51:26

浅谈MySQL连接的“8小时问题”(wait_timeout与空闲检测)

前言一个月前,笔者写了篇Flink维表关联方面的文章,其中将Flink异步I/O与Vert.x JDBC Client配合使用,以解决异步从MySQL获取维度数据的需求。但当时有个数据库连接方面的坑没来得及说,正好今天忙得很,随便写几句话来填一下。发现问题程序上到预发布环境的第二天,TaskManager日志中有时出现以下异常。分析问题MySQL服务器会自动关闭空闲时间超过...

2020-05-27 23:13:48

深入理解Flink的轻量级异步屏障快照(ABS)算法

Prologue在很久之前,笔者曾简单介绍了Chandy-Lamport分布式快照算法,如果看官还未读过,建议作为前置知识补充一下。用过Flink的人都会知道检查点机制有多重要,而Flink做checkpoint的过程正是依赖于Chandy-Lamport算法的变种——异步屏障快照(asynchronous barrier snapshotting, ABS)算法。该算法由五位大佬通过论文《L...

2020-05-26 22:45:00

漫谈Gossip协议与其在Redis Cluster中的实现

前言之前给小伙伴们科普ClickHouse集群的时候,我曾经提到ClickHouse集群几乎是去中心化的(decentralized),亦即集群中各个CK实例是对等的,没有主从之分。集群上的复制表、分布式表机制只是靠外部ZooKeeper做分布式协调工作。想了想,又补了一句:“其实单纯靠P2P互相通信就能维护完整的集群状态,实现集群自治,比如Redis Cluster。”当然限于时间没有...

2020-05-24 22:52:37

物化视图简介与ClickHouse中的应用示例

前言最近在搞520大促的事情,忙到脚不点地,所以就写些简单省事的吧。物化视图概念我们都知道,数据库中的视图(view)是从一张或多张数据库表查询导出的虚拟表,反映基础表中数据的变化,且本身不存储数据。那么物化视图(materialized view)是什么呢?英文维基中给出的描述是相当准确的,抄录如下。In computing, a materialized view is a data...

2020-05-19 21:09:06

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。