自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

懒松鼠Flink

著有:《深入理解Flink核心设计与实践原理》一书

  • 博客(78)
  • 收藏
  • 关注

原创 实时数仓建设第4问:惊呆了,你不知道Jdbc的SQL Connector存在执行delete语句的情况,还敢将数据落Mysql?

当接收到update_before和delete类型的消息后,会根据DDL配置的primary key生成一条delete语句去执行,where条件的字段就是primary key。如果在DDL中定义主键,JDBC接收器将使用upsert语义而不是普通的INSERT语句。Upsert语义指的是,如果底层数据库中存在违反唯一约束的情况,则自动添加新行或更新现有行,这提供了幂等性。由于upsert没有标准语法,所以下表描述了所使用的特定于数据库的DML。

2023-06-15 07:46:07 176

原创 实时数仓建设第3问:你不会认为Lookup维表缓存数据ttl策略和Redis key TTL策略一样吧

同事说维表缓存,当缓存项在指定的时间段内没有被读就会被回收,如果被读就会延长ttl时间。如果关联的维表数据变动就会导致无法获取最新维度数据,这种场景必须关闭缓存。expireAfterAccess: 当缓存项在指定的时间段内没有被读或写就会被回收。expireAfterWrite:当缓存项在指定的时间段内没有更新就会被回收。refreshAfterWrite:当缓存项上一次更新操作之后的多久会被刷新。

2023-06-13 10:18:59 1018

原创 实时数仓建设第2问:怎样使用flink sql快速无脑统计当天下单各流程(已发货,确认收货等等)状态的订单数量

因为每笔订单的状态会发生变化,比如上午为【已支付待卖家发货】,这个时候【已支付待卖家发货】指标数要+1,下午订单的状态变更为【卖家通知物流揽收】,这个时候【卖家通知物流揽收】指标数要+1,而【已支付待卖家发货】指标数要-1。能够得到我们期望的结果,必须使得进入该SQL的数据流由append流变成update/retract流。否则就要根据binlog消息的update /delete情况编写这个减去的逻辑。实时统计当天下单各流程状态(已支付待卖家发货,卖家通知物流揽收,待买家收货等等)中的订单数量。

2023-06-12 10:00:00 1593

原创 实时数仓建设第1问: 一直使用top N,为何duplicate状态和rank状态的TTL执行策略不一样?

rank的ttl是通过注册一个定时器来实现的的原因是,rank为了提高性能,在state前弄一个map缓存,如果在状态上配置ttl,则状态过期了,缓存没有被清除掉。因为用定时器来手动执行状态清除策略,当时间到了则删除缓存和清空状态,问题又来了,那么状态是否就没有更新策略了,到时间就删除了,不会因为修改而更新ttl?在1.16之前 rank为了提高效率,会使用缓存降低对状态的访问。如果状态一直被访问,计时器到期后不会调用清除状态方法,而是重新注册一个计时器,只有当状态没有被访问了,计时器才会进行删除。

2023-06-11 09:29:05 443

原创 springMVC参数绑定

默认支持的参数类型处理器形参中添加如下类型的参数处理注解适配器会默认识别并进行赋值。1HttpServletRequest通过request对象获取请求信息2HttpServletResponse通过response处理响应信息3HttpSession通过session对象得到session中存放的对象4Model通过model向页面传递数据,如下://调用service查询商品信息...

2022-11-07 21:46:46 136 1

原创 6.flink将命令行参数传递给算子《深入理解flink系列》

很多时候,开发的Flink应用程序都需要依赖于外部配置参数,它们用于指定输入和输出源(如文件路径或服务地址),系统参数(并行性,运行时配置)和特定于应用程序的参数(通常在用户函数中使用)。

2022-05-30 08:48:43 423

原创 5.flink通过ExecutionConfig将参数传递给算子《深入理解flink系列》

Flink还允许将自定义配置值传递到执行环境的ExecutionConfig执行配置接口,由于可以在所有富函数中访问执行配置,因此自定义配置将在继承了富函数的用户定义函数中全局可用。

2022-05-30 08:46:53 861

原创 4. flink通过构造函数将参数传统给算子《深入理解flink系列》

Flink提供了三种方式来简化将参数传递给用户定义的函数这一过程:使用构造函数或withParameters(Configuration)方法或者ExecutionConfig接口都可以将参数传递给函数。

2022-05-30 08:44:15 283

原创 3.flink Map 算子《深入理解flink系列》

Map转换操作将用户定义的Map函数应用于数据流中的每个元素。数据流中的每一个元素将作为输入元素进入用户定义的Map函数中,Map函数将会对输入的元素进行转换并产生一个结果元素输出到新的数据流中。Map转换操作实现了一对一的映射,也就是说用户定义的Map函数必须恰好返回一个元素。

2022-05-29 20:30:16 426

原创 2.flink泛型擦除《深入理解flink系列》

对于Flink应用程序中操作符上使用Lambda表达式导致Flink无法推断出泛型的类型的问题,需要开发者在使用lambda表达式传递函数的操作符后面调用returns(...)方法来添加有关此操作符的返回类型的类型信息提示,否则输出将被视为Object类型,从而导致无效的序列化。

2022-05-29 20:18:07 826

原创 1.flink Standalone集群搭建《深入理解flink系列》

文章目录Standalone模式1 免密登录2 Standalone集群1. flink-conf.yaml文件配置2. slaves文件配置3. 分发Flink目录4. 启动一个Flink集群5. 集群节点重启与扩容JobManager节点重启或扩容TaskManager节点重启或扩容Standalone模式Apache Flink集群可以部署在Linux, Mac OS和Windows系统上,唯一的要求是系统环境安装了Java 8.x及以上版本。这里准备两台64位的Linux系统,系统的主机名分别

2022-05-29 20:06:51 496

原创 懒松鼠Flink-Boot(Flink+Spring):一款将Flink与Spring生态完美融合的脚手架工程

目录你可能面临如下苦恼:接口缓存重试机制Bean校验等等......它为流计算开发工程师解决了有了它你的代码就像这样子:仓库地址:懒松鼠Flink-Boot1. 组织结构2. 技术选项和集成情况3. 快速开始3.1 核心基础工程3.2 Spring容器topology-base.xmlconfig.properties3.3 启动类示例3.4 数据源3.5 业务逻辑实现CommonFun...

2020-12-09 20:23:00 469

原创 再也不担心写出臃肿的Flink流处理程序啦,发现一款将Flink与Spring生态完美融合的脚手架工程-懒松鼠Flink-Boot

文章目录你可能面临如下苦恼:接口缓存重试机制Bean校验等等......它为流计算开发工程师解决了有了它你的代码就像这样子:仓库地址:[懒松鼠Flink-Boot](https://github.com/intsmaze/flink-boot)1. 组织结构2. 技术选项和集成情况3. 快速开始3.1 核心基础工程3.2 Spring容器topology-base.xmlconfig.properties3.3 启动类示例3.4 数据源3.5 业务逻辑实现CommonFunction3.6 集群/本地运行

2020-12-04 09:02:36 2002 6

原创 将博客搬至CSDN

懒松鼠Flink-Boot 脚手架由《深入理解Flink核心设计与实践原理》作者开发,让Flink全面拥抱Spring生态体系,使得开发者可以以Java WEB开发模式开发出分布式运行的流处理程序,懒松鼠让跨界变得更加简单。懒松鼠旨在让开发者以更底上手成本(不需要理解分布式计算的理论知识和Flink框架的细节)便可以快速编写业务代码实现。为了进一步提升开发者使用懒松鼠脚手架开发大型项目的...

2020-12-03 18:45:00 86

原创 flink1.7 checkpoint源码分析

初始化state类//org.apache.flink.streaming.runtime.tasks.StreamTask#initializeStateinitializeState();private void initializeState() throws Exception {​StreamOperator<?>[] allOperators = oper...

2019-04-26 10:58:00 136

原创 jdk1.8之线程中断

在Core Java中有这样一句话:"没有任何语言方面的需求要求一个被中断的程序应该终止。中断一个线程只是为了引起该线程的注意,被中断线程可以决定如何应对中断 "线程中断不会使线程立即退出,而是给线程发送一个通知,告知目标线程有人希望你退出。至于目标线程接收到通知后如何处理,则完全由目标线程自行决定。线程中断有关的三个方法void Thread.interrupt();//中断线...

2019-01-18 08:52:00 126

原创 flink1.7自定义source实现

flink读取source data数据的来源是flink程序从中读取输入的地方。我们可以使用StreamExecutionEnvironment.addSource(sourceFunction)将源添加到程序中。flink附带大量预先实现好的各种读取数据源的函数,也可以通过为非并行源去实现SourceFunction接口或者为并行源实现ParallelSourceFunction...

2019-01-05 21:35:00 135

原创 提取jedis源码的一致性hash代码作为通用工具类

一致性Hash热点一致性Hash算法是来解决热点问题,如果虚拟节点设置过小热点问题仍旧存在。关于一致性Hash算法的原理我就不说了,网上有很多人提供自己编写的一致性Hash算法的代码示例,我在跑网上的代码示例发现还是有热点问题。为此我翻阅了Jedis的ShardedJedis类的源码把它的一致性Hash算法提取出来,作为自己的一个工具类,以后自己工程开发中用起来也放心些,毕竟jedi...

2018-09-12 09:10:00 73

原创 JMX,Jstatd做好JVM应用上线的最后一层保障

目录我理解的监控代码异常监控远程主机配置jmx修改要启动的java程序启动参数(JVM_OPTS)。修改文件权限启动jvisualvm监控服务器上的java程序jstatd 连接到远程JVM启动jstatd服务创建安全策略文件启动jjstatd带参数JMX连接与JStatD连接的区别linux命令监控jvm程序top命令查看各进程CPU占用率进程中每个线程占用cpu情况定位线程的运行情况...

2018-09-06 21:00:00 225

原创 java OOM还在看log日志,兄弟你错的的很严重,正确方式是分析dump文件

应用程序出现OOM异常,你是否仍然通过看日志的方式去排查问题(该方式定位解决问题是大概率的巧合而已)?正确的排查方案是进行dump文件分析,你知道为什么吗?目录OOM异常--intsmaze正确姿势dump文件分析--intsmaze正确的姿势--intsmazedump丢失打印--intsmaze查看/var/log/messages文件哪些内存溢出会产生dump文件--intsmaz...

2018-08-29 09:19:00 248

原创 java使用Map做缓存你真的用对了吗?弱引用WeakHashMap了解一下

序:使用java的Map做缓存,你是否考虑过容量导致的OOM问题,是否考虑命中率对性能的影响??目录关于缓存我们应该考虑什么?-intsmazeWeakHashMap弱引用-intsmaze线程安全问题-intsmazeCollections-intsmazeThreadLocal-intsmaze应用系统开发中,我们经常会使用redis,memcache等第三方框架做缓存的解决方案,...

2018-08-16 10:04:00 292

原创 3.sparkSQL整合Hive

  spark SQL经常需要访问Hive metastore,Spark SQL可以通过Hive metastore获取Hive表的元数据。从Spark 1.4.0开始,Spark SQL只需简单的配置,就支持各版本Hive metastore的访问。注意,涉及到metastore时Spar SQL忽略了Hive的版本。Spark SQL内部将Hive反编译至Hive 1.2.1版本,...

2018-08-09 21:37:00 75

原创 java并发线程池---了解ThreadPoolExecutor就够了

总结:线程池的特点是,在线程的数量=corePoolSize后,仅任务队列满了之后,才会从任务队列中取出一个任务,然后构造一个新的线程,循环往复直到线程数量达到maximumPoolSize执行拒绝策略。线程池-intsmaze线程池的思想是:在系统中开辟一块区域,其中存放一些待命的线程,这个区域被称为线程池。如果有需要执行的任务,则从线程池中借一个待命的线程来执行指定的任务,到任务...

2018-08-07 08:44:00 83

原创 (代码篇)从基础文件IO说起虚拟内存,内存文件映射,零拷贝

上一篇讲解了基础文件IO的理论发展,这里结合java看看各项理论的具体实现。传统IO-intsmaze传统文件IO操作的基础代码如下:FileInputStream in = new FileInputStream("D:\\java.txt"); in.read();JAVA虚拟机内部便会调用OS底层的 read()系统调用完成操作,在调用 in.read()的时候就是从...

2018-08-01 10:26:00 95

原创 (理论篇)从基础文件IO说起虚拟内存,内存文件映射,零拷贝

  为了快速构建项目,使用高性能框架是我的职责,但若不去深究底层的细节会让我失去对技术的热爱。  探究的过程是痛苦并激动的,痛苦在于完全理解甚至要十天半月甚至没有机会去应用,激动在于技术的相同性,新的框架不再是我焦虑。  每一个底层细节的攻克,就越发觉得自己对计算机一无所知,这可能就是对知识的敬畏。新IO和传统IO-intsmaze  新IO和传统IO都是用于进行输入/输出。  新...

2018-07-28 09:21:00 145

原创 jdbc操作根据bean类自动组装sql,天啦,我感觉我实现了hibernate

场景:需要将从ODPS数仓中计算得到的大额可疑交易信息导入到业务系统的mysql中供业务系统审核。最简单的方式是用阿里云的组件自动进行数据同步了。但是本系统是开放是为了产品化,要保证不同环境的可移植性,同时同步的表也就6个表,那么就利用现有的基于jdbc的规则引擎工程来自己实现数据的同步。完整的工程代码可以参考我的github https://github.com/intsmaze/...

2018-06-12 14:31:00 116

原创 redis主从,哨兵回忆手册

redis主从  持久化的开启与主从集群是否生效无关系  Slave Server同样是以非阻塞的方式完成数据同步。在同步期间,如果有客户端提交查询请求,Redis则返回同步之前的数据(注意初次同步则会阻塞)。Replication的工作原理:如果Master和Slave之间的链接出现断连现象,Slave可以自动重连Master,但是在连接成功之后,一次完全同步将被自动执行...

2018-05-06 15:08:00 57

原创 IT咨询顾问:一次吐血的项目救火

  年后的一个合作公司上线了一个子业务系统,对接公司内部的单点系统。我收到该公司的技术咨询:项目启动后没有规律的突然无法登录了,重新启动后,登录一断时间后又无法重新登录,对方技术人员一头雾水不知道什么原因,后台日志没有任何错误信息。我临危受命,赶往该项目进行扑火工作,其实本来2天都可以解决的问题,让我花了5天解决。具体原因待我一一解释。1,未掌握log日志的精髓  log日志的deb...

2018-05-04 08:46:00 60

原创 java或判断优化小技巧

写业务代码的时候,我们经常要做条件判断,有的时候条件判断的或判断长达20多个。reg.equals("1") || reg.equals("2") || reg.equals("3")||.....是不是很奔溃1,这个时候代码维护不好维护,字段一多对字段就会出错。2,在最差情况下,执行语句要对这20个判断都判断一下才知道最终的结果,在高性能业务下发挥并不好。这个时候我们可以用map...

2018-03-22 14:21:00 113

原创 本人毕业设计系统附完整文档和项目代码

大四期间9月到11月写的毕业系统,仿照百度文库设计的,融合了session共享,nginx负载均衡,lucene全文检索,敏感词过滤算法,office文件转pdf并提供免下载在线预览功能,登录邮件通知等功能。页面都是趴的51CTO网站套用的。 下面是截取的部分内容,完整文档和完整代码见 https://github.com/intsmaze/FileManage2系统开发工具与技术...

2018-01-07 14:59:00 338

原创 TCP服务端开发为例--web开发不同url请求为何会走不同方法

拿java的web开发为例子,相信有很多小伙伴是做j2EE开发的,htpp请求,json数据传输都是工作中经常用的,查询请求,添加请求,修改请求前端配个url,例如https://localhost/intsmaze/user/add?name=intsmaze。然后后端建立一个controler类(类上配置url映射/user),然后创建一个addUser方法(在方法上配置映射/add...

2017-12-24 15:43:00 73

原创 Storm同步调用之DRPC模型探讨

  摘要:Storm的编程模型是一个有向无环图,决定了storm的spout接收到外部系统的请求后,spout并不能得到bolt的处理结果并将结果返回给外部请求。所以也就决定了storm无法提供对外部系统的同步调用功能。  最近新的黑名单项目需要在storm实时计算平台上提供对外部系统请求调用的同步响应(也就是让storm支持同步调用而不是回调),而Storm的编程模型是一个有向无环图...

2017-09-28 09:36:00 64

原创 一句话说清分布式锁,进程锁,线程锁

  在分布式集群系统的开发中,线程锁往往并不能支持全部场景的使用,必须引入新的技术方案分布式锁。线程锁,进程锁,分布式锁  线程锁:大家都不陌生,主要用来给方法、代码块加锁。当某个方法或者代码块使用锁时,那么在同一时刻至多仅有有一个线程在执行该段代码。当有多个线程访问同一对象的加锁方法/代码块时,同一时间只有一个线程在执行,其余线程必须要等待当前线程执行完之后才能执行该代码段。但是,...

2017-09-09 13:48:00 47

原创 storm从入门到放弃(三),放弃使用 StreamId 特性

  序:StreamId是storm中实现DAG有向无环图的重要一个特性,但是从实际生产环境来看,这个功能其实蛮影响生产环境的稳定性的,我们系统在迭代时会带来整体服务的不可用。  StreamId是storm中实现DAG有向无环图的重要一个特性,官方也提供对应的接口实现让开发者自己灵活化构造自己的ADG图。但是从我这一年从事流式计算的工作中得到的结果也很尴尬的,很多人不知道storm的...

2017-08-04 09:59:00 81

原创 storm从入门到放弃(一),storm介绍

背景:目前就职于国内最大的IT咨询公司,恰巧又是毕业季,所在部门招了20多个应届毕业生,本人要跟部门新人进行为期一个月的大数据入职培训,特此将整理的文档分享出来。原文和作者一起讨论:http://www.cnblogs.com/intsmaze/p/7274361.html微信:intsmaze避免微信回复重复咨询问题,技术咨询请博客留言。Storm是一个开源的分布式实时...

2017-08-02 16:03:00 99

原创 Spark的误解-不仅spark是内存计算,hadoop也是内存计算

市面上有一些初学者的误解,他们拿spark和hadoop比较时就会说,Spark是内存计算,内存计算是spark的特性。请问在计算机领域,mysql,redis,ssh框架等等他们不是内存计算吗?依据冯诺依曼体系结构,有什么技术的程序不是在内存中运行,需要数据从硬盘中拉取,然后供cpu进行执行?所有说sprk的特点是内存计算相当于什么都没有说。那么spark的真正特点是什么...

2017-07-17 20:45:00 59

原创 TCP连接中time_wait在开发中的影响-搜人以鱼不如授之以渔

  根据TCP协议定义的3次握手断开连接规定,发起socket主动关闭的一方socket将进入TIME_WAIT状态,TIME_WAIT状态将持续2个MSL(Max Segment Lifetime),TIME_WAIT状态下的socket不能被回收使用. 具体现象是对于一个处理大量短连接的服务器,如果是由服务器主动关闭客户端的连接,将导致服务器端存在大量的处于TIME_WAIT状态的s...

2017-06-25 14:00:00 78

原创 Strom序列化机制

  Storm 中的 tuple可以包含任何类型的对象。由于Storm 是一个分布式系统,所以在不同的任务之间传递消息时Storm必须知道怎样序列化、反序列化消息对象。  Storm 使用 Kryo库对对象进行序列化。Kryo 是一个灵活、快速的序列化库。Storm 默认支持基础类型、string、byte arrays、ArrayList、HashMap、HashSet 以及 Clo...

2017-06-24 21:38:00 115

原创 redis持久化快速回忆手册

Redis提供的持久化机制: 1). RDB持久化:该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘。 2). AOF持久化:该机制将以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。 3). 无持久化:我们可以通过配置的方式禁用Redis服务器的持久化功能。 4). 同时...

2017-05-07 18:15:00 44

原创 sqoop关系型数据迁移原理以及map端内存为何不会爆掉窥探

  序:map客户端使用jdbc向数据库发送查询语句,将会拿到所有数据到map的客户端,安装jdbc的原理,数据全部缓存在内存中,但是内存没有出现爆掉情况,这是因为1.3以后,对jdbc进行了优化,改进jdbc内部原理,将数据写入磁盘存储了。原文和作者一起讨论:http://www.cnblogs.com/intsmaze/p/6775034.html  Sqoop是apac...

2017-04-27 16:48:00 73

空空如也

空空如也

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

TA关注的人

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