自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(248)
  • 资源 (1)
  • 收藏
  • 关注

原创 极简单系列-kafka 消费

第一个问题:Push 很难适应消费速率不同的消费者,因为消息发送速率是由 broker 决定的。 它的目标是尽可能以最快速度传递消息,但是这样很容易造成 consumer 来不及处理消息, 拒绝服务以及网络拥塞。而 pull 模式则可以根据 consumer 的消费能力以适 当的速率消费消息。 pull 模式不足之处是,如果 kafka 没有数据,消费者可能会陷入循环中,一直返回空数 据。针对这一点,Kafka 的消费者在消费数据时会传入一个时长参数 timeout,如果当前没有 数据可供消费,con

2020-07-29 23:08:09 229

原创 极简单系列-kafka 生产-重复问题

重复的原因 acks = -1 的情况下,数据发送到 leader 后 ,部分 ISR 的副本同步,leader 此时挂掉。比如 follower1 和 follower2 都有可能变成新的 leader, producer 端会得到返回异常,producer 端会重新发送数据,数据可能会重复 另外, 在高阶消费者中,offset 采用自动提交的方式, 自动提交时,假设 1s 提交一次 offset 的更新,设当前 offset = 10,当消费者消费了 0.5s 的数据,offset 移动了 15,...

2020-07-29 23:00:29 1783 2

原创 极简单系列-kafka 生产的可靠性

(1)指明 partition 的情况 直接按指定的(2)没有指明 partition 值但有 key 的情况下,将 key 的 hash 值与 topic 的 partition 数进行取余得到 partition 值;(3)既没有 partition 值又没有 key 值的情况下,第一次调用时随机生成一个整数(后 面每次调用在这个整数上自增),将这个值与 topic 可用的 partition 总数取余得到 partition 值,也就是常说的 round-robin 算法。– 需要有个 .

2020-07-29 22:44:43 185

原创 极简单系列-kafka 存储

每个 partition 对应于一个 log 文件,该 log 文件中存储的就是 producer 生产的数据。Producer 生产的数据会被不断追加到该log 文件末端,且每条数据都有自己的 offset。消费者组中的每个消费者,都会实时记录自己消费到了哪个 offset,以便出错恢复时,从上次的位置继续消费。存储的设计由于生产者生产的消息会不断追加到 log 文件末尾,为防止 log 文件过大导致数据定位效率低下,Kafka 采取了分片和索引机制,将每个 partition 分为多个 s.

2020-07-29 22:21:46 147

原创 极简单系列-kafka 基本原理

简单来说 这就是今天的全部内容了。生产者 生产消息到 集群,集群存储消息,消费者消费具体要谈里边的原理 需要先了解几个概念topicTopic可以理解为一个队列,生产者和消费者面向的都是一个 topicPartition分区。这是一个物理概念。一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列;为了实现扩展性,一个非常大的 topic 可以分布到多个 服务器上,也就是我发送多条消息 ,这些消息可能会实际落到不同的分区上存储。消息1 存到了分区

2020-07-29 22:15:31 202

原创 极简单系列-kafka 简介

一、简介二、基本原理三、消息的存储四、详解producer工作流程五、详解consumer工作流程六、扩展简介Apache Kafka 起初是 LinkedIn 开发的系统,用于他们内部 需要高吞吐处理日志的场景。随后于2011年初开源,2012 年成为 Apache孵化出站一个项目。这个项目 提供了消息的订阅与发布,用作系统间解耦、异步通信、削峰填谷等。同时也提供了Kafka stream插件包实现了实时在线流处理。今天我们主要 讨论kafka 作为消息队列的这部分的内容 ,在消息队列

2020-07-29 21:46:17 205 1

原创 极简单系列-kafka 前序

极简单系列-kafka 概述重要性重要性我从钱上举个例子。这是美国人才市场的数据 美国一个大型职业招聘网站它说在 10 大 薪资最高的技术技能中,掌握 Kafka 以平均每年 12.8 万美元排名第二。这个网站每年会有排名,按照 技术岗位 的薪资范畴排名,也会按照这些人 要掌握的技能进行排名。说白了 就是掌握这个技能能挣更多的钱吧不过一般网上的信息真假难辨。为了保证 这次文章的严谨性 我就去查了查。确实有些偏差 不过差距不大。实际上排名第一。感觉那个卖课网站一点也不专业。而且大家都知

2020-07-29 21:37:23 142

原创 多线程-CountDownLatch

CountDownLatch:初始化线程池run 执行任务,finally里进行cdl.countDown()future.get时进行超时处理,超时后将对应任务取消 并计数减1 @PostConstruct public void init() { //初始化固定线程池 ExecutorService es = new ThreadPoolExe...

2020-04-21 22:53:10 233 1

原创 通过worker进行MQ消费的方案之一

场景:上游实时发送MQ,需要应用进行消费,解析MQ数据并进行计算将最终结果发送给下游。允许秒级延时方案设计考虑:1 需要防频2 考虑消息重试3 历史数据查询4 消息体有过期时效具体方案:MQ采用监听方式,先进性消息的基本验证,redis防重验证。验证成功后先落库并进行redis保存(过期时间默认1天),其中落库和redis进行事务控制。 -》@Transactional(roll...

2020-04-21 22:50:46 451

原创 springboot2.1.3跨域问题

页面问题:Access to XMLHttpRequest at xxx’ from origin ‘http://xx.xx.xx’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.方式一:解决方式两种:全局:@Co...

2020-02-29 19:50:14 298

原创 布隆过滤器

布隆过滤器判断数据一定不存在或可能存在通过数学原理:两个完全随机的数字冲突的概率极小优点:快,节省空间 。缺点:数据只能插入不能删除。数据如何存入布隆过滤器:布隆过滤器是由一个很长的bit数组和一系列哈希函数组成的。数组的每个元素都只占1bit空间,并且每个元素只能为0或1。布隆过滤器还拥有k个哈希函数,当一个元素加入布隆过滤器时,会使用k个哈希函数对其进行k次计算,得到k个哈希值...

2020-02-20 22:36:12 146

原创 待总结

1Redis 内存评估和扩容2Mysql Limit 和Order by3Guava 本地缓存4Lombok5实时数据接口解决方案

2019-06-03 16:10:27 138

原创 读书笔记-函数式编程思维

学习笔记-函数式编程思维函数式编程思维主要内容演化的语言现实应用多语言与多范式读书《函数式编程思维》(Neal Ford 著) 目前理解的函数式编程思维,是一种抽象的映射关系,输入和输出之间的映射。应用这样的抽象,让我们不用关注于低层次细节的实现。最直观的感受就是Java8中的lambda也太好用了啊~函数式编程思维主要内容演化的语言现实应用多语言与多范式主要内容 范式转变...

2019-01-06 09:35:54 406 1

原创 读书笔记-数据结构

数据结构最近看数据结构与算法这本书,先将数据结构汇总一下。 KMP是觉得最有意思的部分之一了。

2018-08-04 15:39:18 299 1

原创 Activiti 用juel 进行条件分支判断

处理工作流时会遇到分支情况,每个分支为个条件或表达式。需要程序去根据条件做分支判断。 这时候 Activiti使用juel 处理表达式。对表达式的支持非常丰富。多条件表达式,以及多变量,多数据类型,等支持完备。 如下: 简单实例:ExpressionFactory factory = new ExpressionFactoryImpl();SimpleContext context = ...

2018-07-02 10:36:01 6036 3

原创 Activiti 读取并转换BPMN文件

读取并转换BPMN文件统一的BPMN标准,对工作流的流程定义采用BPMN统一格式。如下是对该类型文件的解析工具类和方法。核心代码块 public static void bpmnMethod() throws XMLStreamException, IOException { File file = new File("E:/新建2.xml"); In...

2018-07-02 10:06:59 8753 2

原创 highcharts 小结

最近一个多月都在用highcart 做统计分析及展示,做个总结。本文主要写写自己的一些过程:highchart VS echartsDEMO万能方法相关点highcharts VS echarts稳定性兼容性官方DEMOAPI美观程度特性在选图表用哪个框架的时候 ,最终在这两个之间决定的。稳定性和兼容性以及API,DEMO 两者都很完备的。但我在highcharts 官网看了

2018-01-03 10:37:38 753 1

原创 【多线程】线程间的通信

举一个例子来看一下线程间的通信。示例:子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,接着再回到主线程又循环100次。如此循环50次,请写出程序。思路:先找两个方法,分别执行子线程循环10次,主线程循环100次。并这两个同步。由外层控制,循环50次,并通过线程间通信得到,当子线程执行结束后,由主线程执行。并且主线程执行结束后,子线程也能开始执行。实现:先写了一个类,用于子主线程

2016-08-18 22:03:21 803 4

原创 【多线程】线程互斥之synchronized 详解

定义: 线程互斥是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。 我们都知道保证线程完整执行。则需要对其加锁。使用synchronized关键字。在这里锁的对象理论上可以为任何对象。代码块同步: public void output(String name){ int len=name.

2016-08-18 22:02:07 621 1

原创 【多线程】创建线程的三种方式

进程与线程的区别进程就是一个应用程序在处理机上的一次执行过程,它是一个动态的概念,而线程是进程中的一部分,进程包含多个线程在运行。举一个在博客中看到的例子。 进程就好比工厂的车间,它代表CPU所能处理的单个任务。任一时刻,CPU总是运行一个进程,其他进程处于非运行状态。 一个车间里,可以有很多工人。他们协同完成一个任务。 线程就好比车间里的工人。一个进程可以包括多个线程。车间的空间是工人们

2016-08-15 21:22:29 1440 2

原创 【集合详解】HashMap源码解析

一、HashMap概述 二、HashMap的数据结构 三、HashMap源码分析 1.继承 2、关键属性 3、结构 4、构造函数 5、扩

2016-08-15 19:03:22 1867 2

原创 【集合详解】Java集合总结(下)-常用集合类对比

今天我们主要看一张图。 图是无意中在网上发现的,个人觉得非常好。(时间久了就忘了出处,请原创原谅~~) 我们还是从左到右分析。①所有的类都用到Iterator则说明所有的集合类都有遍历集合的方法。②LinkedList除了继承AbstractSequentiallist还实现了Deque接口,所以实现了队列的特性。③这样一来,LinkedList,ArrayList Vector就有得可比了。链

2016-08-04 21:50:28 1467 3

原创 【集合详解】Java集合总结(中)-Map家族

接上文,本篇博客我们接着谈论有关集合的内容。 java所有的集合分成三大类。Set类似罐子,把一个对象添加到Set集合时,Set集合无法记住添加这个元素的顺序,所以Set里的元素不能重复。List集合非常想一个数组,可以记住每次添加元素的顺序,且List的长度可变。Map集合也想一个罐子,只是它里面的每个数据都有两个值组成。 List根据索引访问,Map根据Key访问其value,Set只能根据

2016-08-04 21:22:22 1690 2

原创 【集合详解】Java集合总结(上)-Collection家族

今天我们谈一谈集合。对比数组①数组长度不可变化。集合可以。 ②数组无法保存具有映射关系的数据。如 语文-90。集合可以。 ③数组保存的既可以是对象(实际上是保存对象的引用变量),也可以是基本类型的值。集合只保存对象(实际上也是保存对象的引用变量)。Java的集合类主要由两个根接口派生而出,Collection和Map。这些接口又包含了一些子接口和实现类。我们先看一下Collection家族Co

2016-08-04 20:28:05 1711 1

原创 【集合详解】TreeSet源码解析及自定义排序

上篇博客中,我们已经了解到TreeSet为有序集合,按照Comparator接口定义的排序顺序进行排序。一些基础类型,都已经实现了该接口,默认是按照自然排序进行排列。而我们自定义类型需要手动实现接口。测试首先我们来做一个测试。测试TreeSet的排序功能。用例一:在集合中添加了四个元素 输出结果是:ABCD用例二:颠倒顺序 输出结果是:ABCD 所以TreeSet的默认顺序并不是按照装入集

2016-08-02 17:54:24 1134 1

原创 【集合详解】TreeSet源码解析

TreeSet概述所有实现的接口:Serializable, Cloneable, Iterable<E>, Collection<E>, NavigableSet<E>, Set<E>, SortedSet<E>以下是类的对应关系。从左到右分析上图: 实现Serializable接口,即支持序列化。 实现Cloneable接口,即能被克隆。 实现Iterable接口,即能用foreach使用

2016-08-02 17:35:11 3113 2

原创 【集合详解】ArrayList源码解读之动态扩容

ArrayList 概述ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长。ArrayList不是线程安全的,只能用在单线程环境下。实现了Serializable接口,因此它支持序列化,能够通过序列化传输;实现了RandomAccess接口,支持快速随机访问,实际上就是通过下标序号进行快速访问;实现了Cloneable接口,能被克隆。本文我们主要了解Arraylist如何

2016-07-30 16:15:35 4631 3

原创 【Mybatis】查询缓存

查询缓存: Mybatis是一个持久层框架,经常访问物理数据库,为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。 Mybatis有一级和二级缓存一级缓存: 一级缓存是SqlSession级别的缓存。在操作数据库时需要构造 sqlSession对象,在对象

2016-07-26 15:28:13 1008 3

原创 【Mybatis】从JDBC到Mybatis的改进

本文从原始的JDBC编程,到Mybatis的改进谈起,主要侧重Mybatis再这期间的一些特点和封装。 首先先看一段原始JDBC的查询数据库表记录的操作。Public static void main(String[] args) { Connection connection = null; PreparedStatement preparedSt

2016-07-25 22:16:20 7004 3

原创 【Redis系列】Redis主从复制

一般redis 做主从复制的话,不可能只用一个。这样一但发生故障,丢失数据就比较危险。优势:1: 主从备份 防止主机宕机 2: 读写分离,分担master的任务 例如:大量计算的时候,可以用交给一些特定的计算机。 3: 任务分离,如从服分别分担备份工作与计算工作原理图:方式一:方式二:解释这两种方式的区别是: 第一种是:两个从机监视一台主机,当主机宕机之

2016-07-21 22:15:26 704 4

原创 【Redis系列】Redis频道发布与消息订阅

发布及消息订阅发布订阅(pub/sub)是一种消息通信模式,主要目的是解除消息发布者和消息订阅者之间的耦合。redis作为一个pub/sub的server,在订阅者和发布者之间启动了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向redis server订阅自己感兴趣的消息类型。redis将信息类型成为通道(channel).当发布者通过publish命令向redis s

2016-07-21 21:18:06 3886 4

原创 【Redis系列】Redis的事务处理

事务处理redis对事务的支持目前还比较简单。redis 值能保证一个client 发起的事务中的命令可以连续的执行。而中间不会插入其他client的命令。当一个client在一个连接中发出multi命令时,这个连接会进入一个事务上下文,该连接后续的命令不会立即执行,而是先放到一个队列中,当执行exe命令时,reds会顺序的执行队列中的所有命令。multi应用:示例一:事务演示。测试用例:输入mul

2016-07-21 20:39:58 860 4

原创 【Redis系列】Redis数据持久化

持久化:即把数据存储于断电后不会丢失的设备中,通常是硬盘. 一:常见的持久化方式: 主从:通过从服务器保存和持久化,如mongoDB的replication sets配置 日志:操作生成相关日志,并通过日志来恢复数据 couchDB对于数据内容,不修改,只追加,则文件本身就是日志,不会丢失数据二:redis的数据持久化: 相对memcacher来讲,这是redis的一大优势。redis是一

2016-07-21 19:16:24 842 2

原创 【Redis系列】Redis概要及其数据类型

Redis概要Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。 官网上给出的解释是: Redis is an open source (BSD licensed), in-memor

2016-07-21 16:34:08 707 2

原创 【Linux系列】安装JDK

最近服务器搭建环境,反反复复linux的环境配置进行了好多遍。今天把安装JDK的步骤梳理一下。 系统:CentOS 7 背景:Ubuntu系统一键安装,系统初始小,也因为这,一些基础命令都没有,也没有jdk之类。但是CentOS 7 本身自带jdk 1.7。而项目中统一使用1.8版本。如果你对版本没有特殊要求,那直接用centOS 也是可以的。 以下,是我们在CentOS 7上,卸载旧版本jd

2016-07-17 15:55:42 891 1

原创 【Linux系列】Ubuntu ping通,xshell无法连接

现象描述:Ubuntu能Ping通主机,主机也能ping通虚拟机。而且,虚拟机也能上网。只是xshell不能连接。解决方案: 一:使用管理员身份 设置防火墙。 先查看一下防火墙状态sudo ufw status虽然防火墙是关着的,依旧重新停一下。sudo ufw disable然后开放22端口。(允许所有的外部IP访问本机的22/tcp (ssh)端口 )sudo ufw allow 22二:安

2016-07-17 09:56:20 8495 1

原创 【Linux系列】Ubuntu网络基本配置

Ubuntu网络如何配置方法/步骤 方法一:界面操作 直接使用图形化界面进行设置。设置IP,子网掩码,网关,DNS。 点击界面右上角,网络图标,打开网络设置。 我用的有线方式。 方法二:命令操作 修改网卡的配置文件,这个是比较常用的方法

2016-07-16 22:02:38 873

原创 【Linux系统】Ubuntu之虚拟机 ping 通宿主机,宿主机 ping 不通虚拟机

VirtualBox内的Ubuntu Server虚拟机网络配置基本情况:Ubuntu Server 为全新安装。在安装完成之后发现,通过虚拟机可以 ping 通宿主机,但宿主机 ping 不通虚拟机。正确配置:一:先将虚拟机关闭。然后在vm virtualBox管理器中选择新安装的服务器,点击『设置』—>『网络』,如下: 二选择网络,设置桥接。并且『混杂模式』为全部运行。 备注(三种网络配置的

2016-07-16 21:55:37 13830

原创 【Struts2】值栈

值栈的结构: 右边放的是一个个对象。并且里面有一些对象。 Map的操作, put(k,V); Get(k) Stack的操作是,push(obj) 压栈 ;pop(obj);结合—————–一:存数据的过程 上文中,我们说到Struts2 的拦截器。那么在拦截的过程中会先创建值栈,在值栈里面放了一些初始化的数据。例如request,session,application等等。 如果应用过

2016-06-30 23:52:44 696 2

原创 【MongoDB】上传示例

今天结合项目说一下上传音频到MongoDB的步骤。首先,页面就简单画了一个file类型的文件,和一个提交按钮。代码如下:<input type="file" id="file" name="file" style="display:-webkit-inline-box;width: 180px;"/><input id="addAudioSubmit" type="button" style="

2016-06-30 22:46:57 1561 1

ionic项目应用requireJs前端模块化 示例

ionic项目应用requireJs前端模块化 示例

2016-05-18

空空如也

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

TA关注的人

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