自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Flink+Kafka:构建日志采集+流式处理分析日志

Flink和Kafka的配合难点在于版本的适配,本文提供已适配版本,并且提供docker镜像、docker启动脚本以及k8s多副本部署Flink和Kafka的部署脚本。一、版本选择 Flink:1.10.0-scala_2.12 Kafka:2.12-2.3.1 wurstmeister/zookeeper:3.4.6 版本资源、docker部署脚本以及k8s多副本方式部署脚本(包含k8s各个pod之间的动态通信脚本...

2021-11-04 11:12:26 901

原创 kafka消息存储+查询机制

一、kafka数据存储机制 kafka作为消息中间件,会临时存储消息,提供对外查询接口,数据默认存储168小时(7days),超时会被删除。 kafka采用多文件存储方式来保存数据,主要是有两个方面的考虑:所有数据存储到一个文件,会使得存储文件比较大,影响查询的效率。 对于过期数据的清理,不太方便,需要清理掉过期数据,并将未过期的数据重新写入到文件,切分多个文件后,可以根据文件的日期,直接删除文件即可。 如上图所示,segment段有两个核心文...

2021-09-11 16:27:27 1172

原创 kafka保证数据不丢失

保证kafka数据不丢失,即保证生产者、消费者、broker三个部分数据不丢失。一、保证生产者数据不丢失 为了保证生产者发送的数据已经发送到了broker,需要broker在接收到producer发送的数据时,返回消息确认ack。 在设计broker的ack时,需要考虑到三个问题:问题1:broker一直没有ack状态,producer无法知道broker是否成功接收到消息? 解决方案:设置超时时间,比如10s,超时表示失败,设置重...

2021-09-09 23:33:08 1388

转载 kafka的分片和副本机制

一、分片机制 kafka的分片,是为了解决单台服务器容量有限问题。当数据量比较大时,一台服务器放不下,将数据分成多个片,存储在多个服务器上。每个服务器上的数据叫做一个片。 问题:分片后,数据存储在哪个片区怎么确定?二、副本机制 Kafka的副本机制,解决存储数据的高可用问题,一台服务器上存储数据,有丢失的风险。多拷贝几份数据到不同的服务器,可以达到容灾、容错的目的。总结...

2021-09-09 22:58:57 1671

原创 Redis持久化(RDB、AOF)

持久化,就是把存储在内存中的数据,以文件的形式存储到磁盘上。Redis数据库作为内存数据,肯定要考虑到数据持久化的问题。 Redis提供了两种持久化的方案,一种是文件快照(RDB)方式;一种是过程日志(AOF),将每一步执行的操作保存下来。 下面将讲述RDB和AOF两种持久化方案的执行方法,以及各自的优缺点。 在将持久化内容之前,需要说明下备份文件的目录选择,目录需要有写权限,备份文件的目录可以在redis.conf配置文件中修改...

2021-09-08 23:03:37 97

原创 单机使用docker容器搭建kafka集群

想学习kafka集群的知识,却没有那么多的服务器来部署kafka集群,docker容器技术给希望,本文整理了各位大神的文章,记录下使用docker技术在一台机器上搭建kafka集群。系统环境:服务器一台,2核8G,ubuntu18.04操作系统 docker版本:20.10.8部署2.1 修改docker镜像源 国外镜像源下载比较慢,所以修改docker的镜像源为国内镜像。vim /etc/docker/daemon.json 添加...

2021-09-05 23:06:27 688 2

原创 Kafka的学习——消息队列和kafka简介

一、消息队列1.1 消息队列理解 消息队列,英文全称:Messsage Queue,简称MQ,是将数据从队列的一端进入,从另一端流出的过程。1.2 消息队列使用场景引用耦合 多应用通过消息队列对同一消息进行处理,避免调用接口失败,导致整个过程失败。异步处理 多应用对消息队列中同一消息进行处理,并发处理,比串行效率更高。 主要针对串行处理,比如一个业务:对于注册信息,需要有两个处理过程,发送注册邮件和发送注册短信通知,串行业...

2021-09-05 17:18:59 368

原创 redis之缓存穿透、缓存击穿、缓存雪崩

一、前言 缓存穿透、缓存击穿、缓存雪崩这三个缓存数据库的异常,都和请求直接访问到持久化层的数据库有关,但是原因不一样缓存穿透:因为缓存查询不到数据,去持久化层数据库查询,持久化层数据库中也查询不到。是因为对应的key本来就没有值。 缓存击穿:因为缓存查询不到数据,去持久化层数据库查询,持久化层能够查询到数据。是因为缓存数据库中热门的key突然过期,大量查询请求直接去查询持久化数据库。 缓存雪崩:因为缓存查询不到数据,去持久化层数据库查询,持久化层能够查询到数据。是因为缓存中大量数据...

2021-09-04 22:29:45 59

原创 Spring boot集成redis

一、Spring boot引入redis依赖 Spring boot对redis的支持很好,只需在pom.xml文件中加入<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency> 进入s...

2021-09-02 10:40:39 1286

原创 Redis入门

Redis是一款是以键值对为存储结构的高性能的内存非关系型数据库,主要特点为:非关系型数据库,数据之间没有必然的关系 内部采用单线程工作 高性能,每秒支持十几万次读写操作 支持的数据类型包括:字符串(String)、散列(Hash)、列表(List)、集合(Set)、有序集合(Sorted_set) 各类型的基本操作1、字符串(String)添加/修改数据set key value获取数据,若为空,则返回nilget key删除数据,返回1代...

2021-08-26 23:53:49 184

原创 Mybatis学习

mybatis是一款半自动化的ORM框架 ,之所以说半自动,是因为使用mybatis时,需要手动写SQL语句,不像全自动的hibernate,只需要做好对象和数据库字段的映射关系,就可以CRUD操作。由于Mybatis支持解析SQL语句,所以相较于hibernate,灵活性大大增强。...

2021-08-24 23:17:58 414

原创 HashMap和ConcurrentHashMap

Map这种映射关系的集合,由于它继承了数组和双向链表的优势,适合增删改查,在平时的编程中使用的还是比较多的。所以有必要很清楚的了解map集合在使用时的一些坑。 本文基于常用的jdk版本1.7和1.8来分析下常用的两种类型map集合:hashMap和ConcurrentHashMap。一、HashMap...

2021-08-22 23:03:13 6095

原创 Spring之AOP

AOP,即Aspect Oriented Programming,面向切片的编程,是通过动态代理技术,在功能程序在不修改功能代码情况下,实现功能的扩展的能力。和代理功能一样,其实看内在实现,AOP就是dynamic proxy的封装,AOP内部通过Java或者cglib实现代理的生产,通过继承InvocationHandler()接口或者MethodInterceptor()接口,并在实现接口的方法中调用Method.invoke()实现目标方法的调用,并在目标方法前和后...

2021-08-15 23:00:12 104

原创 Spring中bean的生命周期详解

一、前言上一篇《Spring之依赖注入》,清楚了Spring中bean的装配过程,bean在被Spring容器装配时,作用域(Scope)分为singleton、prototype、request、session,其中request和session适用于WebApplicationContext环境。singleton——单例模式,Spring的容器中只有一个实例,有Spring容器创建,创建时间点,分为启动创建和延迟加载,根据bean对象配置的属性lazy-init属性决定,默认为...

2021-08-15 15:39:37 496

原创 Spring之依赖注入(DI)

Dependency Injection(DI),依赖注入,是一个实例想调用另一个实例的方式。依赖:Bean对象的创建以来Spring容器。 注入:对象使用另一个资源对象,通过注入的方式实现,注入的方式分为构造器注入和set注入。一、DI之构造器注入 构造器注入方式,其实就是对象的有参构造方式。 举个例子,创建一个对象UserT.javapublic class UserT { private String name; pub...

2021-08-13 23:59:07 169

原创 Spring之IoC

Spring概括的说下,就是一个控制反转(IoC)和面向切面的框架。 概括性的概念,足以说明IoC(Inversion of Control)理念在Spring的整个框架中举足轻重的位置。这篇文章,表述了本人对IoC的理解。一、IoC出生之前 IoC是一种设计思想,是相对于对象创建的控制权在程序控制而提出的设计方法,将对象的创建权利交给调用者。 可以看下面的对比例子,可以更好的理解这一概念。 1、先写个UserDao...

2021-08-12 23:11:59 78

原创 ThreadLocal原理

ThreadLocal变量,字面意思理解是"线程局部变量"的意思,它实现的功能是:一个线程内部共享,不同线程之间是隔离的,每个线程只能get()到自己的变量。看下面的ThreadLocal变量的使用代码public class ThreadLocalTest { private static ThreadLocal<Integer> num = new ThreadLocal<>(); public static void...

2021-08-12 10:30:10 947

原创 Java的代理模式

代理,是一种设计模式,提供了对目标对象的一种访问方式,即通过代理访问目标对象。 代理,从实现方式来分,可以分为两大类:静态代理和动态代理。动态代理根据实现的方式,可以分为:jdk动态实现和cglib动态实现。一、静态代理 实现一个对象的静态代理,需要该对象继承一个接口,同时代理类也继承该接口。主要包括三个部分组成:代理目标接口:代理类和目标实现类的基本模板,代理类和目标类都需要实现接口方法。 目标对象:实现代理目标接口的实现类。 代理类:持有目...

2021-08-10 22:43:01 93

原创 泛型学习笔记

1

2021-08-09 23:30:28 100

原创 RabbitMQ学习

参考大神文档:https://blog.csdn.net/kavito/article/details/91403659?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162795376016780265433132%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162795376016780265433132&amp...

2021-08-04 00:00:55 201

原创 NIO学习笔记

一、学习背景 最近在做监控系统,前端页面数据通过socket长连接的方式,后端定时分用户推送数据到前端页面。在做的过程中,深感此实现方案的不爽,每个页面的打开,需要后台启动一个线程,实现长连接,线程阻塞。所以想学习下NIO的socketChannel方式,非阻塞的方式,实现前后端socket连接,并实现数据的推送。二、NIO概述 NIO主要有三大核心:Channel(通道)、Buffer(缓冲区)、Selector(选择器)。传统的IO基于字节流和字符流进行操作,一条...

2021-08-01 17:38:40 98

原创 docker安装RabbitMQ

1、docker官网查看需要下载的版本https://registry.hub.docker.com/_/rabbitmq/?tab=tags&page=1&ordering=last_updated选择Tags,可以看到不同的tag对应的版本,比如选择3-management版本,下载镜像命令如下:docker pull rabbitmq:3-management2、启动docker容器docker run -d --hostname my-rabbit --.

2021-07-27 15:03:16 110

原创 oracle修改分区

--查看表的所有分区以及所在表空间select TABLE_NAME,PARTITION_NAME from USER_TAB_PARTITIONS where TABLE_NAME=表名;--删除表分区alter table 表名 drop partition 分区名 UPDATE GLOBAL INDEXES;--查看现有表空间select tablespace_name from DBA_TABLESPACES;--增加表分区alter table 表名 add partitio.

2021-07-27 14:42:13 2637

原创 Prometheus+Grafana搭建统计监控工具

选择开源工具Prometheus实现系统监控、docker服务监控、API网关状态监控数据提取、保存,配合开源可视化图形Grafana展示监控数据,并且根据监控数据,通过邮箱发出告警邮件。 下面将以采集一台服务器运行数据为例,说明监控系统的运行原理及搭建流程。一、Prometheus Prometheus是一个开源的监控系统,可以通过job/exporter开放的API接口,定时获取监控数据,并保存。所以在说明Prometheus之前,必须要介绍下exporter。1.1...

2021-07-23 19:23:44 1350

原创 java中的强引用、软引用、弱引用

在内存空间不足的情况下,针对对象是否被回收,分为强引用、软引用、弱引用和虚引用。一、强引用 大部分引用都是强引用,比如下面的例子,object和str都是强引用, 当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不回收这种对象。Object object = new Object();String str = "chenchao";二、软引用 软引用是用来描述一些有用但不是必须的对象,在Java中用java.lang.ref....

2021-07-23 19:16:50 145

原创 JAVA复制,重点分析下浅拷贝和深拷贝

将一个对象的引用复制给另一个对象,Java提供了三种复制方式,即:直接赋值、浅拷贝、深拷贝。1、直接赋值 直接使用=赋值,即A a1 = a2,复制的是对象的引用,a1和a2指向的是同一个对象,当a1发生变化时,a2也会随之变化。public class CopyTest { public static void main(String[] args){ Person p1 = new Person(); Person p2 = p1;...

2021-07-23 19:15:46 97

原创 JAVA内部类

一、内部类定义 将一个类定义在另一个类里面或者一个方法里面,称之为内部类,内部类分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。二、内部类详细介绍2.1 成员内部类 成员内部类看起来是外部类的一个变量,可以访问外部类的变量和方法,即使是private权限的变量或者方法。内部类作为外部类的成员变量,可以使用static修饰(class类唯一可以用static修饰符的方法)。使用static修改的内部类,为静态内部类。 未使用static修饰的内部类,为非静态内部...

2021-07-23 19:14:21 87

原创 JAVA程序计数器理解

JVM在运行时,内存区域中属于程序私有的区域包括:程序计数器、虚拟机栈、本地方法栈。本片文章主要理解程序计数器的相关概念以及工作原理。一、什么是程序计数器 程序计数器是记录着当前线程所执行的字节码的行号指示器。二、为什么需要程序计数器 Java在编译后的字节码未经过JIT(实时编译器)编译前,其执行方式是通过“字节码解释器”解释执行。可以简单理解为解释器读取装入内存的字节码,按照顺序读区字节码指令,并翻译成指定的操作,并根据这些操作进行计算、跳转、循环等操作。 ...

2021-07-23 19:13:28 1566

原创 JAVA线程以及线程池

一、实现线程方式1.1 类继承Thread类 Thread本质上是实现了Runnable接口的实例,自己类继承Thread类,等于重写了Thread对Runnable接口的实现。启动线程的唯一方法就是通过Thread类的start()方法./** * @Description * @Date 2021/07/15 17:11 * @Created by cc */public class MyThread extends Thread{ @Override p..

2021-07-23 19:12:54 63

原创 JAVA锁学习

一、JAVA锁的分类 JAVA锁可以分为乐观锁、悲观锁、自旋锁。1.1 乐观锁 乐观锁是认为共享对象读多写少,遇到并发写的可能性很低的乐观心态,每次去拿对象的时候,都认为别人不会修改,所以不会上锁,但是在更新的时候,会先获取共享对象的版本号,比较跟上一次的版本号是否一致,如果不一致,则需要重复“读取对象-比较-写“的操作,如果一致,就直接更新。 java中乐观锁基本都是通过CAS操作实现的,CAS是一种更新的原子操作,比较当前值和传入值是否一样,一样则成功,不一样则失败。...

2021-07-23 19:12:12 178

原创 JVM原理理解——类的加载过程和GC原理

一、类开始加载 如上图所示,一直到初始化部分,JVM完成了一个类的加载过程。过程中要点梳理如下:双亲委派加载 类加载时,首先都不要自己尝试去加载,都是委托给父类加载,父类找不到,在尝试自己加载。好处是:使用不同的类加载器,最终得到的都是同样的Object对象。 加载流程图如下:准备阶段的初始化和初始化阶段区别 准备阶段的初始化,是JVM为static变量分配好内存空间后,系统的初始化值,而运行前的初始化阶段,是将static变量设置成程序中指定的值。举个...

2021-07-23 19:11:01 230

原创 JAVA集合

一、Java集合分类 Java结合在包java.util中,主要分为,set(集)、list(列表,包含Queue)、Map(映射) 其中、set、list、queue的基本接口是Collection,Map是映射表的基础接口。 Iterator是迭代器,可以通过集合的迭代器,遍历集合中的数据。list集合包括ArrayList、Vector、LinkedList。 set集合包括HashSet、TreeSet、LinkedHashSet。 Queue——两端出入的li...

2021-07-23 19:10:14 60

Flink+Kafka搭建流式处理框架(内涵docker部署脚本和k8s多副本部署脚本)

flink搭配kafka,构建流式采集框架,提供了docker部署方式脚本和k8s多副本方式部署脚本

2021-11-03

空空如也

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

TA关注的人

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