自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

fenglei0415的博客

only create,you can know

  • 博客(95)
  • 资源 (2)
  • 收藏
  • 关注

原创 spark/flink + kafka 是如何做到 exactly once的?

端到端Exactly Once的含义就是:Source的每条数据会被处理有且仅有一次,并且输出到Sink中的结果不重不丢。Flink和Spark structure streaming能否做到端到端的exactly once?是可以的。由于原理类似,接下来拿spark举例分析一下。kafka有关详细内容请看:KIP-98 - Exactly Once Delivery and Transactional Messaging - Apache Kafka - Apache Software Fou

2022-04-09 11:45:12 1913

原创 单节点事务与分布式事务

单节点事务在一个不确定的存储环境中,会有许多出错的情况。例如,网络故障、磁盘故障、应用程序的某种bug,这些未解决的问题都会影响到系统的高可靠性。处理好上述问题就需要完善的容错机制,而事务就是一直以来简化这些问题的首选。事务提供的安全保障即ACID,分别代表原子性、一致性、隔离性与持久性。其中,A、I、D属于数据库系统固有属性,一致性更多是应用层属性,应用层借助数据库提供的原子性和隔离性来实现一致性,一致性本身并不源于数据库。1. 原子性原子性能够保证,当事务进行中发生了错误,就必须中止事务

2021-11-02 22:27:01 321 1

原创 聊聊OLAP

OLAP和OLTP不同的是,表中单条记录本身并不是查询所关心的,比较典型的特点包括有聚合类算子、涉及多表Join,查询所用谓语/条件没有索引。由于这些操作都非常耗计算资源,而且数据仓库相比数据库在数据量上大很多,因此OLAP类查询经常表现为cpu-bound而不是io-bound。按照建模类型将OLAP划分:1. MOLAP2. ROLAP3. HOLAP一. MOLAP这应该算最传统的数仓了,九十年代olap概念提出来时,指的就是MOLAP数仓,M即表示"多维"。大多数MO

2021-10-23 11:50:09 805 1

原创 kafka2.7的代码改动

最近看了下kafka2.7.0的源码,相对2.0.0已经有挺多细节发生了变动。印象最深有两点:日志索引项的二分查找做了优化。原理不复杂,但是却挺高级。问题是原版的二分查找是没有考虑到缓存的,一旦生成了新的索引项会强行变更查找路径。新版的算法考虑到了热区和冷区。 Rebalance的时候,添加了静态consumer,就不必所有consumer全部参与重分配了,这也是在性能上有很大提升。kafka2.0.0二分源码如下:kafka-2.7.0二分源码如下:...

2021-04-24 20:57:53 204

原创 I/O之随笔

开篇1. RocketMQ底层实现竟然是Netty?2. Kafka通讯采用基于tcp的socket方式,响应式模型,何为响应式模式?3. Redis的单线程是是采用什么样的IO实现?4. Netty的底层实现是基于NIO,和Linux系统底层NIO一样吗?5. 怎么理解阻塞式IO和非阻塞式IO?6. java的BIO、NIO、AIO区别?7. 那epoll和select又是什么?学习最好的方式就是带着问题思考,下面一起分析下。Linux系统五大IO模型什么是IO?

2021-03-17 23:23:39 132 1

原创 知识体系

总结下自己的知识体系,发现任重道远。底层的技术依然要不断巩固。

2021-03-14 16:39:43 225

原创 SparkSql 有关谓词下推

谓词下推最近公司做审计,任务有点重。然后发现spark sql跑出来的结果和实际情况有出入,于是经过多方打探和测试,今天做个了结。所谓谓词下推,也就是返回值是true和false的函数,做开发经常用到filter函数,这个高阶函数传入的参数就是一个返回true或false的函数。在SQL中,没有方法,只有表达式,where后边的表达式起的作用就是过滤的作用,而这部分语句被SQL引擎解析处理后,在数据库内部正式以谓词的形式呈现。SparkSQL首先会对输入的SQL语句进行一系列的分析,包括词法分析

2021-03-07 19:45:54 1626 4

原创 2020年总结

呵呵

2021-01-24 11:52:14 210 1

原创 数仓中的缓慢变化维

数仓中经常提到缓慢变化维,那什么是缓慢变化维?大概意思就是数据会发生缓慢变化的维度叫缓慢变化维,是维度,维度,维度表。举个栗子:每个公司都会有销售人员或者是市场推广人员。在数据仓库中,事实表记录着业务人员的销售记录,维度表更新着业务人员的最新信息。假如一天,小王从北京调到上海开展业务,那么他以后的业绩肯定是算到上海区域了,但是调离前的业绩还是要算到北京的,这个变化怎么处理比较合适呢?这就涉及到缓慢变化维这个概念了。通用的几种方法:一. 新数据覆盖旧数据前提是这个变化是公司不care的,或

2020-07-25 23:13:00 1517 3

原创 kafka日志段中的二分查找

关于算法,我一直的想法是,我们平时太注重算法本身,或者是为了面试学算法,却忽略了它们在实际场景中的应用。比如说,我们学习了太多的排序算法,但是,对于普通的应用开发人员来说,亲自使用这些算法去设计编程任务的机会实在太少了。说起数组排序,第一时间可能只记得Collections.sort 方法了,但它底层应用了什么排序算法,其实也需要研究。难得的是,在阅读Kafka源码的过程中,遇到了一些算法设计,看完有种醍醐灌顶的感觉。举两个感触比较深的例子。一. 二分查找Kafka 中直接接触索引或索引文件..

2020-07-05 17:51:49 1129

原创 kafka日志对象(三)—— Log的操作

Log 的常见操作分为 4 大部分:高水位管理操作:高水位的概念在 Kafka 中举足轻重,对它的管理,是 Log 最重要的功能之一。 日志段管理:Log 是日志段的容器。高效组织与管理其下辖的所有日志段对象,是源码的核心。 关键位移值管理:日志定义了很多重要的位移值,比如 Log Start Offset 和 LEO 等。确保这些位移值的正确性,是构建消息引擎一致性的基础。 读写操作:所谓的操作日志,大体上就是指读写日志。读写操作是kafka高吞吐量的基础。高水位管理操作一. 高水位定义

2020-05-23 22:46:34 2407 1

原创 kafka日志对象(二)—— Log

日志(Log)是日志段(Log Segment)的容器,里面定义了很多管理日志段的操作。Log 源码结构Log 源码位于 Kafka core 工程的 log 源码包下,文件名是 Log.scalaLog Class & ObjectLog Obj:object Log { val LogFileSuffix = ".log" val IndexFileSuffix = ".index" val TimeIndexFileSuffix = ".timeindex

2020-05-23 21:07:10 2712 2

原创 kafka日志对象(一)—— Log Segment

kafka的高吞吐量和持久性是一大亮点,内部的日志操作是如何呢,研究明白了一定豁然开朗,至少我有种恍然大明白的感觉。kafka的日志结构Kafka 日志对象由多个日志段对象组成,而每个日志段对象会在磁盘上创建一组文件。包括消息日志文件(.log)、位移索引文件(.index)、时间戳索引文件(.timeindex)以及已中止事务的索引文件(.txnindex)。当然,如果你没有使用 Kafka 事务,已中止事务的索引文件是不会被创建出来的。图中的一串数字 0 是该日志段的起始位移值(Base

2020-05-23 18:24:13 1775

原创 kafka请求全流程(三)—— I/O处理

承接上一篇,请求的接收与分发(https://blog.csdn.net/fenglei0415/article/details/106172921),接下来应该是请求队列的通道(https://blog.csdn.net/fenglei0415/article/details/105960812)。本篇是I/O的线程逻辑。Broker端参数 num.io.threads 参数表示的就是 I/O 线程池的大小。所谓的 I/O 线程池,即 KafkaRequestHandlerPool,也称请求处理线程池

2020-05-17 18:49:02 949

原创 kafka请求全流程(二)—— 请求的接收以及分发

承接上一篇(https://blog.csdn.net/fenglei0415/article/details/106162288)二. 请求的接收以及分发主要分析两个类,实现网络通信的关键部件。分别是Acceptor 类和Processor 类。先介绍下SocketServer组件下的类:AbstractServerThread 类:这是 Acceptor 线程和 Processor 线程的抽象基类,定义了这两个线程的公有方法,如 shutdown(关闭线程)等。 Acceptor 线程

2020-05-17 17:15:43 1522

原创 kafka请求全流程(一)—— 客户端请求

kafka的源码路上一直都是个小学生,如有发现错误,请多指正,不胜感激。总结了一张kafka网络通信层架构,如图:整张图大概划分5部分,分别是:客户端发送请求、请求的接收以及分发、请求通道的处理、I/O线程执行、实际处理请求并处理响应...

2020-05-17 12:47:46 3667 2

原创 kafka请求队列模块

最近一直研究kafka源码,想着有必要记录一下。不管研究是否到位,也算是一个里程碑吧。当我们说到 Kafka 服务器端,也就是 Broker 的时候,往往会说它承担着消息持久化的功能,但本质上,它其实就是一个不断接收外部请求、处理请求,然后发送处理结果的 Java 进程 (因为scala 代码被编译之后生成.class 文件,它和 Java 代码被编译后的效果是一样的)。高效地保存排队中的...

2020-05-06 23:07:45 1372

翻译 数据中台之OneData体系

知其然知其所以然,公司的SaaS系统已沉淀上亿的商户,数仓也经过一年的改造,已基本成型,基于此做个总结。背景随着公司业务的发展,频繁迭代和跨部门的垂直业务单元变得越来越多。但由于缺乏前期规划,导致后期数仓出现了严重的数据质量问题,这给数据治理工作带来了很大的挑战。在数据仓库建设过程中,总结的问题包括如下几点:缺乏统一的业务和技术标准,如:开发规范、指标口径和交付标准不统一。 缺乏有效...

2019-10-19 20:28:11 12258 4

原创 Hive日常调优3

3.1 Fetch抓取Fetch抓取是指,Hive中对某些情况的查询可以不必使用MapReduce计算。例如:SELECT * FROM orders;在这种情况下,Hive可以简单地读取employee对应的存储目录下的文件,然后输出查询结果到控制台。在hive-default.xml.template文件中hive.fetch.task.conversion默认是more,老版本hive默...

2019-10-04 12:16:47 1013

原创 Hive常用命令2

2.1 数据导入2.1.1 向表中装载数据(Load)语法:hive> load data [local] inpath '/opt/module/datas/order.txt' [overwrite] into table order(partition='20190925');load data:表示加载数据local:表示从本地加载数据到hive表;否则从HDFS加...

2019-10-04 11:02:07 813

原创 Hive的基本概念1

Hive的基本概念1. 什么是HiveHive:由Facebook开源用于解决海量结构化日志的数据统计。Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。本质是:将HQL转化成MapReduce程序Hive处理的数据存储在HDFSHive分析数据底层的实现是MapReduce执行程序运行在Yarn上1.2. Hive的优缺点...

2019-10-04 10:07:45 790

原创 数仓模型构建流程

数据仓库的发展大致经历了这样的三个过程:1. 简单报表阶段:这个阶段,系统的主要目标是解决一些日常的工作中业务人员需要的报表,以及生成一些简单的能够帮助领导进行决策所 需要的汇总数据。大部分表现形式为数据库和前端报表工具。3. 数据集市阶段:这个阶段,主要是根据某个业务部门的需要,进行一定的数据的采集,整理,按照业务人员的需要,进行多维报表的展现, 能够提供对特定业务指导的数据,并...

2019-08-10 19:18:19 22222 6

原创 数仓构建流程

首先理解以下基本概念:1. 业务板块:比数据域更高维度的业务划分方法,适用于特别庞大的业务系统。2. 维度:维度建模由Ralph Kimball提出。维度模型主张从分析决策的需求出发构建模型,为分析需求服务。维度是度量的环境,是我们观察业务的角度,用来反映业务的一类属性 。属性的集合构成维度 ,也可以称为实体对象。例如, 在分析交易过程时,可以通过买家、卖家、商品和时间等维度描述交易发生的...

2019-08-10 19:16:24 10340 1

原创 聊聊DW/BI

随着公司业务的不断发展,公司会积累大量各种类型的数据。这些海量的数据如果没有得到有效的分析和利用,那么不会对业务产生该有的价值。构建一个大数据分析平台,结合多个业务系统,从中抽取海量数据进行管理、整合、分析和利用,从中发现潜在问题和有价值的规律,并通过可视化的方式进行展现,能够为管理层提供科学决策的支持,提升企业的业务能力和效益,确保数据驱动业务增长。 那么数据...

2019-08-04 23:19:49 2894

原创 数据仓库

做数仓做久了,真感觉越来越向数据产品经理的方向发展了。数据产品经理是近年来随着大数据的发展蹦出来的一个岗位,很多人搞不懂数据分析师、数据产品经理、数据仓库开发工程师、ETL工程师到底是什么岗位?下周吧,总结一篇。这周先写写数仓的东西,感觉自己真应该总结下过往经验输出一下了。一、什么是数据仓库?数据仓库是为了方便企业快速做各种业务决策提供数据支撑而构建的集成化数据环境。有一句话很好的体现了数...

2019-07-28 15:26:51 788

原创 八皇后问题

前言中国有一句古话,叫做“不撞南墙不回头",生动的说明了一个人的固执,有点贬义,但是在软件编程中,这种思路确是一种解决问题最简单的算法,它通过一种类似于蛮干的思路,一步一步地往前走,每走一步都更靠近目标结果一些,直到遇到障碍物,我们才考虑往回走。然后再继续尝试向前。通过这样的波浪式前进方法,最终达到目的地。当然整个过程需要很多往返,这样的前进方式,效率比较低下。此为递归算法。接下来的这个问题也和...

2019-05-31 15:33:37 484

原创 九型人格

九型人格概念人格被分为九型,你必然属于其中一型。而这个型就是你的基本人格形态。一个人的基本人格类型不会发生改变,即使在生活中,受环境因素影响发生种种变故,但即使你的基本人格型态是伴随终身的。随着年龄增加,环境变化,价值观、世界观的完善,人们为了顺应成长,社会文化,最终会形成一种性格为主,多种性格为辅的特质。性格无好坏,每一型都有优劣,没有男人专属,也没有女人专属。了解...

2019-04-14 23:22:47 11936

原创 对于spark,你需要知道的核心概念

最近总结一波面试问题(包括python,MySQL,数据科学,机器学习,大数据等,一个人力量有限),有兴趣查看github1.hadoop 和 spark 使用场景?Hadoop/MapReduce 和 Spark 最适合的都是做离线型的数据分析,但 Hadoop 特别适合是单次分析的数据量“很大”的情景,而 Spark 则适用于数据量不是很大的情景。(1) 一般情况下,对于中小互联...

2019-04-14 21:12:48 1086

原创 实战中spark遇到的问题

最近总结一波面试问题(包括python,MySQL,大数据等,一个人力量有限),有兴趣查看github1.数据倾斜的产生和解决办法?数据倾斜以为着某一个或者某几个 partition 的数据特别大,导致这几个 partition 上的计算需要耗费相当长的时间。在 spark 中同一个应用程序划分成多个 stage,这些 stage 之间是串行执行的,而一个 stage 里面的多个 t...

2019-04-14 21:12:29 1058

原创 MySQL 查询速度慢与性能差问题

一、什么影响了数据库查询速度1.1 影响数据库查询速度的四个因素1.2 风险分析QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。客户机在发送请求时开始计时,...

2019-02-09 18:32:06 1173

转载 线程的同步和进程的通讯

线程同步机制:各个线程可以访问进程中的公共变量,资源,所以使用多线程的过程中需要注意的问题是如何防止两个或两个以上的线程同时访问同一个数据,以免破坏数据的完整性。数据之间的相互制约包括1、直接制约关系,即一个线程的处理结果,为另一个线程的输入,因此线程之间直接制约着,这种关系可以称之为同步关系2、间接制约关系,即两个线程需要访问同一资源,该资源在同一时刻只能被一个线程访问,这种关系称之为线...

2019-01-31 19:47:58 406

原创 SQL 优化经验总结

总结一波面试问题(包括python,MySQL,数据科学,机器学习,大数据,一个人力量有限),查看 githubSQL 优化经验总结我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为笔者学习、摘录、并汇总部分资料与大家分享!1. WHERE子句中的连接顺序MySQL采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过...

2019-01-15 19:13:21 705

原创 数据特征工程

更多总结查看Github只要数据好,模型随便搞。所以说来相对于机器学习和建模,准备好数据是极其重要的。那如何准备数据呢,讨论一下。对于数据特征工程,可以这样划分:1. 特征使用 <数据选择,可用性>2. 特征获取 <特征来源,特征存储>3. 特征处理 <数据清洗,特征预处理>4. 特征监控 <现有特征,新特性>今天说说...

2019-01-05 11:43:17 727

原创 自定义MapReduce

1. 在python程序中,每个类只能有一个构造器,就是__init__方法。2. 通过@classmethod机制,可以用一种与构造器相仿的方式来构造类的对象。3. 通过类方法多态机制,可以更通用的方式构建子类以上为核心构造一个MapReduce ,首先定义一个类读取数据:class InputData(): """基类""" def read(self):...

2018-12-25 19:37:55 620

原创 字典有序

collections中封装了OrderedDict方法,目的是给dict 增加有序功能。但是从python3.6 开始,dict默认就有序了。来测试下from collections import OrderedDictod = OrderedDict()od['a'] = 1od['b'] = 2od['c'] = 3od.keys()>>> odic...

2018-12-20 20:50:01 896

原创 有关词频统计

统计一个数组或者一个文档中出现频率最高的词,或者对元素排序是数据统计中经常用到的。先说下最常用到的方法:from random import randintdata = [randint(100, 110) for _ in range(30)] # 初始化一个长度为30的随机列表d = dict.fromkeys(data, 0) # 初始化一个字典,data中值为key, ...

2018-12-19 22:19:24 425

原创 给元祖命名

开发中经常遇到 mysql.conn.fetchall() 返回一个元祖,如何快速给元祖中每个字段命名并且可读性高呢?第一种自定义枚举类from enum import IntEnum # 内置枚举类res = ("Bob", 22, "male") # 定义一个元祖class Student(IntEnum): NAME = 0 AGE = 1 SE...

2018-12-19 19:31:19 559 3

原创 如何在csdn关掉百度广告

   顺便宣传下个人公众号。每次看博客,有百度的广告就很不舒服,索性屏蔽掉。浏览器输入链接:https://chrome.google.com/webstore/search/Adblock%20Plus,添加第一个就好。提示安装成功!接下来在高级菜单里点击添加我的过滤列表,把百度广告的域名链接添加进去:然后刷新,没有了百度广告,一切很美好!...

2018-12-10 20:06:40 841

原创 AVL树和伸展树

在树的结构中,一个最重要的用途是用作二叉搜索树。接下来使用搜索树结构有效的实现有序映射。二叉搜索树的结构特性产生的最重要的结果是搜索算法。在search中,搜索一次下降一层,树高为h,每一个节点的搜索时间为O(1)(至于为什么是O(1),则涉及到哈希表的设计),则最坏情况下总的搜索时间为O(h)。基于二叉搜索树,提供了聊两种性能更高的搜索树算法。分别是AVL树,伸展树。当然还有红黑树和多路...

2018-12-08 16:30:08 1408

原创 LeeCode 104and110 python

104.  给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。# Definition for a binary tree n...

2018-12-06 21:58:00 432

git基础知识总结大全

1.git的下载和安装 2.创建远程个gitHub仓库 3.git创建本地版本库 4.上传项目到仓库中 5.从gitHub仓库下载项目到本地仓库

2018-05-28

javascript原生轮播图

javascrpt原生轮播图 轮播图的功能: * 1、点击左右按钮可以切换图片,并且达到不会出现连续切换 * 2、点击小圆点可以切换图片 * 3、可以自动轮播图片,当鼠标离开时 * 4、当鼠标在大容器上时,不能自动轮播,并且左右两个按钮缓动进入,离开大容器时,左右两个按钮缓动离开 * 5、小圆点变化时,缓动效果变化透明度,逐渐消失

2018-05-25

空空如也

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

TA关注的人

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