自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

东方小硕

除非经由记忆之路

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

原创 深入Kafka服务端

Kafka服务端设计介绍协议设计Kafka自定义了一组基于TCP的二进制协议,只要遵守这组协议的格式,就可以向Kafka发送消息,也可以从Kafka中拉取消息,或者做一些其他的事情,比如提交消费位移等。协议格式设计:协议请求头格式如下图所示:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iWTXQFGc-1615297820144)(quiver-image-url/7C0E753A27EDD54D16A6532957444DE6.jpg =557x94)]

2021-03-09 22:12:23 188

原创 深入理解Kafka cruise control

基本设计负载均衡目标机架目标(Hard Goal)RackAwareGoal: 相同分区的副本必须在不同机架上RackAwareDistributionGoal: 保证副本均衡分散在机架上资源使用阈值目标CapacityGoal(Hard Goal)一台broker的每一个资源(CPU、Disk、NetWorkIn、NetWorkOut)利用率都应该在预定义的阈值之下**CpuCapacityGoal ****DiskCapacityGoal ****

2020-12-31 15:59:14 1670

原创 可靠的数据传递

Kafka的可靠性各种各样的可靠性及其在Kafka场景中的含义;Kafka的复制功能,以及它是如何提高系统可靠性的;如何配置Kafka的broker和主题来满足不同的使用场景需求,以及生产者和消费者如何在各种可靠性场景里使用它们;如何验证系统的可靠性。可靠性保证Kafka可以保证分区消息的顺序;只有当消息被写入分区的所有同步副本时(但不一定要写入磁盘),它才被认为是"已提交"的;只要还有一个副本是活跃的,则已经提交的消息就不会丢失;消费者只能读取已经提交的消息。复制分区首

2020-12-06 17:58:34 222

原创 Kafka常用运维命令

使用权限管理/opt/bigdata/app/kafka/bin/kafka-configs.sh --zookeeper zkurl --entity-type topics --entity-name yyj1 --alter --add-config join.isr.wait.seconds=600# 关于broker间的通信,需要一个admin用户bin/kafka-configs.sh --zookeeper zkurl --alter --add-config 'SCRAM-SHA-

2020-12-06 17:54:33 371

原创 Kafka生产者

向Kafka写入数据Kafka生产者组件从创建一个ProducerRecord对象开始,ProducerRecord对象需要包含目标主题和要发送的内容。我们可以指定键或分区。在发送ProducerRecord对象时,生产者要先把键和值对象序列化成字节数组,这样才能在网络上传输。接下来,数据被传送给分区起,如果之前在ProducerRecord对象里指定了分区,则分区器不会再做任何事情,直接把指定的分区返回。如果没有指定分区,则分区器会根据ProducerRecord对象的键来选择一个分区。选

2020-12-06 17:40:25 787

原创 Kafka消费者

从Kafka读取数据KafkaConsumer概念消费者和消费者组具体示意图Kafka消费者从属于消费者群组。一个群组里的消费者订阅的是同一个主题,每个消费者接收主题一部分分区的消息。消费者群组和分区再平衡分区的所有权从一个消费者转移到另一个消费者,这样的行为被称为再平衡。再均衡非常重要,它为消费者群组带来了高可用性和伸缩性(我们可以放心地添加或移除消费者),创建Kafka消费者与KafkaProducer类似,创建一个KafkaConsumer对象,需要3个必

2020-12-06 17:36:20 274

原创 深入Kafka

背景如果只是为了开发Kafka应用程序,或只是在生产环境使用Kafka,则了解Kafka的内部工作原理不是必需的。但了解Kafka的内部工作原理有助于理解Kafka的行为,也有助于诊断问题。以下是要探讨的问题:Kafka如何进行复制;Kafka如何处理来自生产者和消费者的请求;Kafka的存储细节,比如文件格式和索引。组件介绍Kafka总体架构概览:集群成员关系Kafka使用Zookeeper来维护集群成员的信息。每个broker都有一个唯一标识符,这个标识符可以在配置文件里指定

2020-12-06 17:30:11 148

原创 Kafka入门

入门基础认识-什么是Kafka基础概念:Kafka作为一个集群,运行在一台或者多台服务器上;Kafka通过topic对存储的流数据进行分类;每条记录中包含一个key,一个value和一个timestamp(时间戳)核心API:Producer API: 允许一个应用程序发布一串流式的数据到一个或多个Kafka topic;Consumer API:允许一个应用程序订阅一个或多个topic,并且对发布给他们的流式数据进行处理;Streams API:允许一个应用程序作为一个

2020-12-06 17:02:47 143

原创 红黑树笔记

文章目录介绍二叉搜索树常用操作什么是红黑树红黑树的旋转红黑树的插入红黑树的删除附录介绍二叉搜索树常用操作最大关键字元素和最小关键字元素:通过从根开始沿着left孩子指针直到遇到一个NIL,我们总能在一棵二叉搜索树中找到一个元素,下面的过程返回了一个指向在以给定结点x为根的子树中的最小元素的指针,这里假设不为NILdef TREE-MINIMUM(x): while x.left != NIL: x = x.left return xTREE-MAXIMUM的伪代码是对

2020-10-06 15:50:45 115

原创 Spring缓存-redis应用

文章目录redis是什么Spring为什么要使用redisredis在Spring中的应用附录redis是什么redis是一种NoSQL数据库,其具备如下特性:1. 基于内存运行,性能高效;2. 支持分布式,理论上可无限扩展;3. key-value存储系统;4. 开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、key-value数据库,并提供多种语言的APISpring为什么要使用redis缓存热点数据,对热点数据进行排序等redis在Spring

2020-10-06 15:35:39 161

原创 Java并发-Alluxio Metrics实践

文章目录介绍Alluxio并发测试调试并发测试分析并发知识点总结归纳可重入锁与AQS附录介绍Alluxio中有很多并发性的代码,这些并发性的代码需要经过严整的测试,其中这些测试主要依赖于ScheduledTimer.java、HeartbeatScheduler.java、HeartbeatThread.java。上图中SleepingTimer类主要是用于Alluxio Metrics指标上报,用于控制指标周期性进行统计上报;ScheduledTimer类主要用于验证系统在高并发场景下的正确性

2020-09-19 15:45:39 389

原创 Java多线程实战——并发框架

文章目录并发架构任务执行并发的取消与关闭线程池的使用多线程应该避免的问题避免活跃性问题注意性能并发程序测试并发高阶应用显式锁Java内存模型附录并发架构任务执行为什么需要并发框架更快的响应、更高的吞吐率、更可靠的稳定性串行执行任务例如下面这个例子:/** * 串行的Web服务器: 因为此程序每次只能处理一个请求,所以其执行性能很糟糕 */public class SingleThreadWebServer { public static void main(String[] a

2020-09-19 15:42:37 924

原创 Java多线程实战——Java并发编程基础知识

文章目录背景什么是多线程、高并发、分布式为什么要引入多线程、高并发、分布式多线程、高并发有什么问题Java并发编程基础知识线程安全性对象的共享对象的组合基本同步方法附录背景什么是多线程、高并发、分布式多线程:从软件或硬件上实现多个线程并发执行来完成任务的一种方法;分布式:为了解决单个物理服务器性能瓶颈问题而采用的优化手段;高并发:系统运行的一种状态,即用来解决短时间内遇到大量操作请求为什么要引入多线程、高并发、分布式多线程:聚焦于如何使用编程语言将CPU调度能力最大化;分布式:从物理资源的角

2020-09-19 15:38:23 250

原创 Alluxio缓存策略

重新认识一下AlluxioAlluxio是一个基于内存的分布式缓存开源项目Alluxio架构示意图:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1vYsBy87-1598777030069)(quiver-image-url/366F796BD55E15FF0EC884D72AF4E19A.jpg =1446x794)]缓存现状缓存名词解释缓存穿透缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,这时的用户很可能是攻击者,攻击会导致数据库压力过大

2020-08-30 16:47:25 1396

原创 Spring数据库事务

什么是数据库事务数据库事务是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务处理是一种机制,用来管理必须完成批执行的mysql操作,以保证数据库不包含不完整的操作结果。事务:指一组SQL语句;Spring为什么支持数据库事务对于一些业务网站而言,产品库的扣减、交易记录以及账户都必须是要么同时成功,要么同时失败。又例如在一些特殊场景下,如一个批处理,它将处理多个交易,但是在一些交易中发生了异常,这个时候就不能将所有的交易都回滚(否

2020-07-05 16:37:36 194

原创 Spring拦截器、过滤器、AOP

文章目录拦截器过滤器过滤器与拦截器对比Spring AOPSpring interceptor与AOP之间的区别与联系参考链接拦截器 什么是拦截器 Java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。拦截器的拦截,是基于Java反射机制实现的,拦截的对象只能是实现了接口的类,而不能拦截url这种链接。 拦截器作用 当请

2020-07-05 15:28:01 596

原创 Alluxio扩容

拷贝源码工程在正常运行的worker的alluxio父目录,执行如下命令:scp -r alluxio-1.8.1/ [目标机器host]:[目标目录]拷贝完成后,在目标机器上执行如下命令,root用户修改目录权限:ln -sfn alluxio-1.8.1 alluxiochown -R hdfs:hdfs ./alluxio ./alluxio-1.8.1worker初始化初始化worker服务器,在worker服务器上执行:#!/bin/bashmkdir /mnt/ramdis

2020-07-05 14:46:35 215

原创 Alluxio打包部署

机器需求其中,master和zk可以共用机器。alluxio源码编译打包本地编译打包工程根目录下的README文件:编译:mvn -T 2C clean install -DskipTests -Dmaven.javadoc.skip -Dfindbugs.skip -Dcheckstyle.skip -Dlicense.skip -Dchecksum.skip -Phadoop-2 -Dhadoop.version=2.6.0-cdh5.14.4打包:./dev/scripts/g

2020-07-05 14:45:37 830 2

原创 Alluxio源码本地调试

首先,请确保调试alluxio源码的环境是一个类Unix的系统环境后台验证启动在${ALLUXIO_HOME}目录下进行操作在后台启动alluxio: $ ./bin/alluxio-start.sh local SudoMount1.8.1-server启动后,后台运行四个进程($ jps 命令可以查看到当前后台运行的进程): AlluxioWorker AlluxioProxy AlluxioMaster AlluxioSecondaryMaster.

2020-07-05 14:43:29 720

原创 Alluxio源码编译+导入IDEA

前提条件确保你安装了Java(JDK 8或更高版本)以及Maven3.3.9及以上,在源码编译之前需要了解到本项目是开源项目,即github提供了官方源码。Alluxio官方文档【快速入门】:https://docs.alluxio.io/os/user/stable/en/Getting-Started.html克隆github源码…设置Alluxio配置文件在${ALLUXIO_HOME}目录下,配置alluxio-site.properties文件:#通过拷贝conf/alluxio-s

2020-07-05 14:36:23 697

原创 Java字符串处理性能对比

文章目录背景有哪些常用的字符串切割方法?每种字符串切割方法的使用使用正则表达式进行匹配JVM自带1:"".split()JVM自带2:indexOf()、substring()apache common工具类:StringUtils.split()guava工具类:Splitter.on().splitToList()背景在数据开发的过程中,涉及到日志内容处理的时候,往往需要用到一些字符串处理方法,在Java中除了JVM自带的字符串处理方式,其他的一些工具类(比如apache/common、guava等

2020-06-13 16:38:01 715

原创 部署prometheus-alertmanager监控告警

文章目录集群概况prometheus高可用(待优化)alertmanager高可用集群监控告警部署架构图监控告警流程分析监控告警安装部署容器化安装部署非容器化安装部署需要用到的配置文件prometheus配置文件告警规则配置文件alertmanager配置文件附录集群概况当前共有三个ceph集群,需要对三个ceph集群搭建一套高可用对监控告警系统,因为prometheus支持对ceph集群的监控告警,所以本文采用prometheus+alertmanager的形式搭建一套相对健壮的监控告警系统。pro

2020-06-07 22:35:30 1331 2

原创 JVM总结

文章目录写在前面主要内容Java内存区域与内存溢出异常说明Java虚拟机运行时数据区域写在前面写这篇读书笔记,是因为第一遍刷深入理解Java虚拟机的过程中,感觉其前后内容联系不大,再加上篇幅过长且部分内容拗口,所以就容易造成看了后面忘了前面,看了前面不知道看的内容在实际生产的过程中会有怎样的应用、可以解决什么样的问题。所以,本篇读书笔记主要从笔者的角度结合一些大佬的分析来进行总结。主要内容笔者第一遍刷的时候,主要看了以下章节的主要内容:Java内存区域与内存溢出异常垃圾收集器与内存分配策略虚

2020-05-12 22:49:59 222

原创 ceph

文章目录什么是ceph为什么是cephceph运维实践什么是cephceph是一个集对象存储、块存储、文件存储于一体的开源存储系统。同时,ceph能够应对当今世界日益增长的大量数据——ceph拥有近乎无限的扩容能力(下图解释了为什么ceph能够无限扩容)为什么是ceph原因见上图。ceph运维实践运维实践暂时见下面的两篇参考文章,就不把笔记贴上来了!参考文章:ceph对象存储安...

2020-03-22 11:25:08 230

原创 webhook-java实现反向API接口

@TOCwebhook是什么为什么是webhook如何用java实现webhook

2020-03-22 10:21:45 8362 2

原创 alluxio文件读取交互

文章目录总流程Client - MasterClient - Worker情况一:本地命中 - LocalFilePacketReader读取流程client端worker端情况二:非本地命中的其他读取行为(Netty远程数据传输)client端worker端Worker - Master非本地读取完成后的同步行为总流程Client - MasterClient - Worker情况一:本...

2020-03-07 17:15:52 1562

原创 Netty笔记——综述

netty是什么?网络开发过程中(如上图),数据的传输分别需要经过网络五层。我们以Alluxio(一个开源的大数据加速项目)为例来进行说明:Alluxio运行在应用层,当Alluxio客户端向Alluxio服务端请求数据的时候,请求端和响应端都会有一个应用层和传输层进行通信的过程,这里着重描述一下传输层的处理。当有客户端与Alluxio服务端第一次进行通信的时候,Alluxio服务端会创建...

2020-01-30 17:02:12 144

原创 大数据架构图笔记

2019-12-08 15:46:31 181

转载 java8学习之Stream介绍与操作方式详解笔记

关于默认方法【default method】的思考:在上一次【http://www.cnblogs.com/webor2006/p/8259057.html】中对接口的默认方法进行了学习,那在Java8中在接口中接出默认方法是为了解决什么问题或者说规避什么问题呢?凡是在JDK引入一个新的概念肯定是专家们经过了一定的权衡才加入的,那加入默认方法的具体原因是啥呢?其实主要是为了解决Java...

2019-12-08 14:45:08 310

转载 java8学习之Lambda表达式继续探讨&函数式接口Function等详解

对于上次【http://www.cnblogs.com/webor2006/p/8186039.html】已经初步引入的Java8中Stream流的概念,其中使用了map的操作,它需要接受一个Function这样的函数式接口,回顾一下: 而这次专门对Function这个函数式接口进行进一步学习,因为这个函数式接口是比较重要的,先查看一下该接口的javadoc:另外还有...

2019-12-08 14:43:20 529

转载 java8学习之Lambda表达式与函数式接口、流【转载笔记】

对于Java8其实相比之前的的版本增加的内容是相当多的,其中有相当一大块的内容是关于Lambda表达式与Stream API,而这两部分是紧密结合而不能将其拆开来对待的,但是是可以单独使用的,所以从学习的顺序来说首先得要学好Lambda表达式,然后再学习Stream API,最后再把这两者有机的结合起来,而这两部分涉及的知识体系又非常的多,很多东西都改变了以往对java这种面向对象语言的...

2019-12-01 10:32:32 1196 1

原创 Alluxio

分布式缓存:Alluxio 已经有的开源为什么还要进行开发: 基于开源来做的一个内部应用场景,就像sylph一样(也是开源的) 最终的目标: 1.为HDFS迁移未来一段时间数据的跨机房访问做缓冲; 2.对同机房数据的访问做加速缓冲; 什么是Alluxio: ->Alluxio是世界上第一个以内存为中心的虚拟的分布式存储系统(面向基于云的数据分析和人...

2019-11-16 20:33:22 838

原创 Redis客户端Jedis && Lettuce

redis Java客户端(jedis):->使用set(String key, String Value)将大量的key-value写入redis中,受限于网络IO,400万的数据需要2个小时写入;->hmset(String key, Map<String, String>)对于Java客户端来说能够很快的进行写入(对于vaid下的fields-values和oai...

2019-11-16 20:10:25 695

原创 心跳机制

心跳机制——>心跳机制: ->为什么要做心跳管理与上报(作用是什么?): ->长连接:通信上方建立TCP连接后进行通信,通信完毕后,不主动断开连接,而是保持连接; 特点:一直保持连接; 优点:通信速度块(在当前连接可用情况下,每次请求(响应)=简单的数据发送(接收)) 免去了DNS解析、连接建立等时间 应用...

2019-11-16 19:38:02 1282

原创 Flink-Kafka相关学习笔记

文章目录Kafkaflink中国github社区: [PPT + 视频](https://github.com/flink-china/flink-training-course)Flink整合kafka:Kafka->kafka基本概念: Fast: 非常快,单个Kafka broker每秒能够读写数百兆字节从数千台客户端, Scalable: 可扩展,容量不够之后,可以通过增...

2019-10-06 00:30:14 623

原创 Effective Java笔记

——>第64条:努力使失败保持原子性: 一般而言,失败的方法调用应该使对象保持在被调用之前的状态。具有这种属性的方法被称为具有失败原子性(failure atomic) -> 最简单的办法就是设计一个不可变的对象(见第15条)。若对象是不可变的,失败 原子性就是显然的; -> 对于在可变对象上执行操作的方法:在执行操作之前检查参数的有效性(见第38条)。这可以使得在对...

2019-09-30 14:34:14 66

原创 Java并发编程实战笔记

多线程简介 ->为什么要编写并发程序? 能使复杂的异步代码变得更简单(从而极大地简化了复杂系统的开发); 充分发多处理器系统的强大计算能力。 ->并发概述: ·操作系统的出现使得计算机每次能运行多个程序,并且不同的程序都在单独的进程中运行: 操作系统为各个独立执行的进程分配各种资源(内存、文件句柄、安全证书等) 进程之间的粗粒度通信...

2019-09-15 20:45:52 102

原创 缓存架构笔记

多级缓存系统->缓存概述: 缓存是分布式系统中的重要组件; 主要解决: 高并发(大数据场景中的热点数据访问的性能问题) ->缓存的原理: 将数据缓存到写入/读取速度更快的存储(设备); 将数据缓存到离应用最近的位置; 将数据缓存到离用户最近的位置。 ->缓存的分类:(从部署角度有以下几个方面的缓存应用) CDN缓存; ...

2019-09-15 10:41:52 124

原创 git基本使用总结

git初始化配置</font前提是你已经安装完成了;下面就是配置公钥了 ssh-keygen -t rsa -C "[email protected]" ;ssh-add ~/.ssh/id_rsa ;查看刚生成的公钥cat ~/.ssh/id_rsa.pubgit提交代码规范git statusgit add . #可以通过git checkout <fileName...

2019-09-15 00:01:54 178

原创 linux常用命令笔记(包含win10)

持续更新…linux(CentOs)常用命令rm -rf ./*jps -lmvkill -9 pid rpm(选项)参数: -a:查询所有套件; -b<完成阶段><套件档>+或-t <完成阶段><套件档>+:设置包装套件的完成阶段,并指定套件档的文件名称; -c:只列出组态配置文件,本参数需配合"-l"参数使用; -d:只...

2019-09-14 16:22:45 179

空空如也

空空如也

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

TA关注的人

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