9 LittleMagics

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 7w+

基于Flink+ClickHouse打造轻量级点击流实时数仓

前言今天事情又比较多,写得言简意赅一些,看官勿怪。Flink和ClickHouse分别是实时计算和(近实时)OLAP领域的翘楚,也是近些年非常火爆的开源框架,很多大厂都在将两者结合使用来构建各种用途的实时平台,效果很好。关于两者的优点就不再赘述,本文来简单介绍笔者团队在点击流实时数仓方面的一点实践经验。点击流及其维度建模所谓点击流(click stream),就是指用户访问网站、App等W...

2020-09-27 23:14:05

Flink on YARN的第三种部署模式:Application Mode

前言短文状态继续。长久以来,在YARN集群中部署Flink作业有两种模式,即Session Mode和Per-Job Mode,而在Flink 1.11版本中,又引入了第三种全新的模式:Application Mode。本文先回顾两种传统模式的做法与存在的问题,再简要介绍Application Mode。传统部署模式Session模式Session模式是预分配资源的,也就是提前根据指定的...

2020-09-23 23:14:03

浅谈Linux管道(pipe)

前言管道(pipe)是Linux系统中重要的进程间通信(IPC)机制,又分为匿名管道(anonymous pipe)和命名管道(named pipe/FIFO)两种。今天用脑过度,几句话简单谈论一下。匿名管道当我们在一般语境下提起管道这个词时,说的就是匿名管道。匿名管道在两个有亲缘关系的进程(即存在父子或兄弟关系的进程)之间创建,本质上是由内核管理的一小块内存缓冲区,默认大小由系统中的PIP...

2020-09-22 23:28:14

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

今天折腾了半天才回到家,写篇简单的,然后趁早洗洗睡吧。在Java程序退出时——尤其是非正常退出时,我们可能需要先执行一些善后工作,如关闭线程池、连接池、文件句柄等,即所谓“优雅停机”(graceful shutdown)。如何保证善后工作的代码能够被执行到呢?Java为用户提供了关闭钩子(shutdown hook),它在以下情景都会被调用:程序正常退出,即最后一个非守护线程结束时;程序中...

2020-09-21 23:03:23

手撕一个LRU Cache

前言今天时间紧张,借一道经典面试题简单聊两句吧。LeetCode 146 - LRU Cache最近最少使用缓存(LRU Cache)是一种简单而高效的缓存机制,其思想基于局部性原理,在CPU缓存管理、操作系统内存管理以及Redis、Memcached等内存数据库中有非常重要的地位。下面来按照题目要求实现一个最简单的LRU Cache。Design a data structure th...

2020-09-17 22:34:39

ClickHouse MergeTree变得更像LSM Tree了?——Polymorphic Parts特性浅析

前言笔者在之前的文章中已经提到过,MergeTree引擎族是ClickHouse强大功能的基础。MergeTree这个名词是在我们耳熟能详的LSM Tree之上做减法而来——去掉了MemTable和Log。也就是说,向MergeTree引擎族的表插入数据时,数据会不经过缓冲而直接写到磁盘。官方文档中有如下的描述:MergeTree is not an LSM tree because it ...

2020-09-14 22:18:10

从AggregateFunction.merge()到Flink会话窗口实现原理

前言在我们使用Flink DataStream API编写业务代码时,aggregate()算子和AggregateFunction无疑是非常常用的。编写一个AggregateFunction需要实现4个方法:public interface AggregateFunction<IN, ACC, OUT> extends Function, Serializable { A...

2020-09-13 21:57:05

Flink CEP的基石:NFA-b自动机原理简介

前言Flink的复杂事件处理(complex event processing, CEP)库能够在无界数据流中通过匹配定义好的事件模式来发现一系列事件之间的关联规律,从而有效支持趋势分析、风险监控、欺诈检测等业务场景。它提供了一套简单易用、表达性强的API,例如,在10秒的时间窗口内检测事件的报警级别:env.setStreamTimeCharacteristic(TimeCharacteri...

2020-09-09 22:34:56

Kafka Partition的消费分配策略

前言在之前的一篇文章中,笔者介绍了Kafka Consumer Group(消费者组)以及Rebalance(重平衡)的概念:为了使得Consumer易于组织、可扩展以及更好地容错,Kafka将一个或多个Consumer组织为Consumer Group,即消费者组。Consumer Group的唯一标识就是group.id。Group内的所有Consumer共同消费已订阅的各个Topic的...

2020-09-06 22:25:19

ClickHouse新特性之SQL化用户配置

Friday night,写篇超短文吧。在之前的ClickHouse版本中,我们只能通过修改users.xml文件来配置用户及相关的参数(权限、资源限制、查询配额等),不是很方便。好在从20.5版本起,ClickHouse开始支持SQL化的用户配置(如同MySQL、PostgreSQL一样),易用性增强了很多。SQL化用户配置默认是关闭的,要启用它,需要在users.xml中的一个用户(一般就...

2020-09-04 22:07:34

通用对象池化框架Apache Commons Pool 2简析

前言我们知道,创建Java对象会涉及到对象初始化、内存分配、类加载等多个步骤。当对象比较重量级时,频繁创建对象会带来可观的性能开销,所以在上古时代(大雾)就产生了对象池化(object pooling)的技术。顾名思义,对象池中维护了一批已经创建好的重量级对象,要使用时就从中取出一个,用完就归还到池里,通过复用对象来提高效率。我们在日常工作中时刻都在应用池化技术:线程池、数据库连接池、网络连接...

2020-09-02 22:19:19

Actor模型与Akka Actor体系基础总结

前言最近用业余时间把Flink的RPC基础设施翻了个底朝天,又与之前分析过的Spark RPC机制做了一些对比,越发觉得Actor模型甚为精妙,值得简单记录一下,顺便也可作为日后解析Flink RPC机制的基础入门。Actor模型Actor模型由Hewitt、Bishop和Steiger在1973年通过论文《A Universal Modular Actor Formalism for Ar...

2020-09-01 23:17:40

Flink SQL w/ Blink Planner执行流程解析(上篇)

Foreword大数据领域SQL化的风潮方兴未艾(所谓"Everybody knows SQL"),Flink自然也不能“免俗”。Flink SQL是Flink系统内部最高级别的API,也是流批一体思想的集大成者。用户可以通过简单明了的SQL语句像查表一样执行流任务或批任务,屏蔽了底层DataStream/DataSet API的复杂细节,降低了使用门槛。那么,一条Flink SQL语句是如何...

2020-08-27 23:05:08

Flink RocksDB状态后端参数调优

Foreword截至当前,Flink作业的状态后端仍然只有Memory、FileSystem和RocksDB三种可选,且RocksDB是状态数据量较大(GB到TB级别)时的唯一选择。RocksDB的性能发挥非常仰赖调优,如果全部采用默认配置,读写性能有可能会很差。但是,RocksDB的配置也是极为复杂的,可调整的参数多达百个,没有放之四海而皆准的优化方案。如果仅考虑Flink状态存储这一方面,我...

2020-08-26 23:19:04

ClickHouse遇见RoaringBitmap

Q&AQ:如图。A:当然是自带的。其实RoaringBitmap正是ClickHouse位图的底层实现(笑RoaringBitmap的预备知识请见这里。在CH中产生位图使用普通函数bitmapBuild可以由无符号整形数的数组直接产生位图,e.g.WITH bitmapBuild([32, 65, 127, 1026]) AS bmSELECT bm,toTyp...

2020-08-21 22:42:09

聊聊Java WeakHashMap背后的事情

前言本月还没有写过Java相关的东西,今天终于挤出点时间来了,弄一篇基础知识吧。WeakHashMap是平时常见的HashMap的变种,它是基于弱引用(WeakReference)的。我们已经知道,不管内存是否足够,弱引用对象都会随着GC被回收,所以WeakHashMap特别适用于内存敏感的局部缓存场景。本文简单探究一下它的部分实现细节。属性WeakHashMap的属性比Ha...

2020-08-19 21:50:06

漫谈SIMD、SSE指令集与ClickHouse向量化执行

前言ClickHouse之所以会像闪电一样快("blazing fast"),是多方面优化的结果,包括且不限于:高效且磁盘友好的列式存储,高效的数据压缩,精心设计的各类索引,并行分布式查询,运行时代码生成等。另外,ClickHouse为了最大限度地压榨硬件——尤其是CPU——的性能,实现了向量化查询执行(vectorized query execution)机制。这个名词相对于上面的那些可能没...

2020-08-13 23:47:58

Flink新特性之非对齐检查点(unaligned checkpoint)简介

前言在食用本文之前,建议看官先充分食用这两篇文章:《Chandy-Lamport分布式快照算法小记》与《深入理解Flink的轻量级异步屏障快照(ABS)算法》。屏障对齐的风险在Flink的检查点机制中,屏障(barrier)是划分快照(状态)的边界。在启用exactly once语义的条件下,当一个算子有多个输入流时,需要等待所有输入流中当前检查点N的屏障都到达其输入缓冲区,才能安全地触发检...

2020-08-11 21:05:00

解读ClickHouse日志中的SQL查询计划

截至目前,ClickHouse并未在正式版本中提供查看查询计划的原生EXPLAIN语法。虽然GitHub上对应的Pull Request已经实现了,但是还没有发布,需要自行编译新版源码才能享受到便利。不过,我们可以通过ClickHouse的日志间接地读出每条SQL的查询计划,借助clickhouse-client,命令形式如下:clickhouse-client -h <host> ...

2020-08-09 23:22:38

计算汉明权重的SWAR(SIMD within a Register)算法

前言在很久之前,笔者在《布隆过滤器(Bloom Filter)原理及Guava中的具体实现》这篇文章的最后,说到JDK中提供了计算整形数二进制表示中1的数量[即所谓汉明权重(Hamming weight)]的方法,并且说它是Java语言中最强的骚操作之一。本文来简单探究一下骚操作背后的思路。朴素的SWARInteger.bitCount()方法的源码中有一句注释。// HD, Figure...

2020-08-08 22:59:20

查看更多

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