自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 Kafka的消息日志存储

文章目录1. 文件目录布局2. 日志索引两个索引文件稀疏索引日志分段切分索引文件预分配空间2.1 偏移量索引文件2.2 时间戳索引3. 日志清理3.1 日志删除基于时间的保留策略基于日志大小的保留策略基于日志起始偏移量3.2 日志压缩4. 磁盘存储4.1 消息顺序追加4.2 页缓存4.3 零拷贝不使用零拷贝的文件读取与发送零拷贝技术参考文献1. 文件目录布局主题、分区、副本回顾:Kafka中的消息是以主题为基本单位进行归类的,各个主题在逻辑上相互独立。每个主题又可以分为一个或多个分区,分区的数量可

2020-07-16 09:56:43 741

原创 Kafka中的主题与分区

文章目录1、主题、分区与副本1.1 多分区与多副本机制1.2 AR、ISR和OSR副本集1.3 日志文件的HW、LEO2. 主题管理2.1 创建主题自动创建主题脚本创建主题2.2 查看主题2.3 修改主题为什么不支持分区减少?2.4 删除主题2.5 使用KafkaAdminClient管理主题3. 分区管理3.1 优先副本的选举Kafka为什么不支持主从的读写分离?3.2 分区重分配4. 如何选择合适的分区数参考文献1、主题、分区与副本主题(Topic):Kafka中的消息以主题为单位进行归类,生产者负

2020-07-15 15:17:56 1756

原创 Kafka消费者客户端详解

文章目录引言1. 消费组消费组(Consumer Group)与分区(Partition)消费组中只有一个消费者消费组中消费者数量与分区数量相同消费组中消费者数量少于分区数消费组中消费者数量大于分区数多个消费组订阅相同的主题2. 分区分配策略2.1 RangeAssignor分区分配策略4个分区两个消费者2.2 RoundRobinAssignor分区分配策略消费组内每个消费者都订阅了两个主题消费组内消费者订阅的主题不同2.3 StickAssignor分区分配策略3. 两种消息投递模式3.1 点对点模式3

2020-07-15 09:59:50 2467

原创 Kafka生产者客户端详解

文章目录引言生产者 vs 消费者线程安全1. 生产者Java客户端生产者客户端代码:必备参数配置2. 消息发送模式2.1 发后即忘2.2 同步发送2.3 异步发送3. 消息发送流程3.1 生产者拦截器自定义拦截器与拦截器链3.2 序列化器StringSerialize序列化器的内部实现自定义序列化器3.3 分区器默认分区器自定义分区器4. 消息确认与异常重试`acks`参数可重试异常和不可重试异常消息重试与消息的顺序性5. 生产者客户端整体架构5.1 两个线程5.2 消息累加器 RecordAccumula

2020-07-15 09:54:23 1821

原创 Redis事务

文章目录引言1. 事务的执行过程1.1 事务开始1.2 命令入队1.3 执行事务2. 事务命令2.1 WATCH命令3. 事务的ACID性质3.1 原子性3.2 一致性3.3 隔离性3.4 持久性总结参考文献引言Redis通过MULTI、EXEC、WATCH、DISCARD命令来实现事务;Redis服务是单进程单线程执行的,Redis事务是将多个命令请求打包,然后一次性、按顺序地执行多个命令,并且在事务执行期间,服务器不会中断事务而改去执行其他客户端的命令请求,它会将事务中的所有命令都执行完毕,然后

2020-07-12 21:14:46 119

原创 Redis发布与订阅操作

文章目录引言1. 数据结构1.1 频道字典2. 模式链表2. 发布订阅命令2.1 订阅频道命令 subscribe2.2 退订频道 unscubscribe2.3 订阅模式 psubscribe2.4 退订模式 punsubscribe2.5 发送消息 publish参考文献引言Redis支持频道订阅和模式订阅;频道订阅:订阅的频道和发布消息的频道相同时,客户端可以接收到消息,如一个客户端订阅频道news.it,则只有频道news.it的消息才可以发送给该客户端;模式订阅:一个模式可以匹配一个或多

2020-07-12 20:51:00 240

原创 Redis集群模式详解

文章目录引言客户端命令CLUSTER MEETCLUSTER ADDSLOTSCLUSTER REPLICATE1. 集群节点1.1 集群数据结构clusterState结构clusterNode结构clusterLink结构1.2 节点启动2. 槽指派2.1 记录节点的槽指派信息2.2 传播节点的槽指派信息2.3 记录集群所有槽的指派信息3. 在集群中执行命令3.1 计算键属于的槽3.2 判断槽是否由当前节点负责4. 重新分片4.1 重新分片原理4.2 ASK错误4.3 ASKING命令4.4 ASK错误

2020-07-12 20:30:37 244

原创 Redis哨兵模式(Sentinel)详解

目录文章目录一、Sentinel1. 何为Sentinel2. Sentinel启动流程当一个Sentinel启动时,它需要执行以下步骤:2.1 初始化服务器2.2 使用Sentinel专用代码2.3 初始化Sentinel状态2.4 初始化Sentinel状态的masters属性2.5 创建连向主服务器的网络连接3. Sentinel获取主服务器信息4. Sentinel获取从服务器信息5. Sentinel与主从服务器的发送和订阅信息向主服务器和从服务器发送信息接收来自主服务器和从服务器的频道信息6.

2020-07-12 15:59:27 816

原创 Redis过期键删除机制与内存淘汰策略

1. 过期键删除机制Redis使用的过期键删除机制是:惰性删除+定期删除;惰性删除策略:每次从键空间获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键;惰性删除的优点:CPU友好,不会占用太多CPU时间;惰性删除的缺点:内存不友好,浪费内存空间,有内存泄露的危险:如果数据库中有非常多的过期键,而这些过期的键又恰好没有被访问到的话,那么它们将永远不会被删除(除非手动执行flushdb),这样有可能导致内存泄露;内存泄露:无用的垃圾数据占用了大量的内存,而服务

2020-07-12 15:15:43 168

原创 Redis常用的对象操作命令

文章目录Redis客户端命令`exit``shutdown``select index``dbsize``keys *``flushdb``exists key``move key index``ttl key``expire key num``persist key``del key``type key``save` 与 `bgsave``info`Redis 数据操作一、String操作`set key value``get key``del key``append key value``strlen

2020-07-10 16:40:32 933

原创 Java对象内存布局

文章目录1. 对象内存布局1.1 对象头Mark Word类型指针1.2 实例数据1.3 对齐填充2. 对象的创建2.1 类加载检查2.2 内存分配指针碰撞空闲列表2.3 修改指针2.4 空间初始化零值2.5 对象设置2.6 对象初始化3. 对象的访问定位3.1 使用句柄访问3.2 使用直接指针访问参考文献1. 对象内存布局在HotSpot虚拟机中(JDK默认的虚拟机),对象在内存中存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)

2020-07-09 09:34:30 189

原创 JVM运行时数据区

文章目录引言一、JVM运行是数据区域1. 程序计数器2. Java虚拟机栈3. 本地方法栈4. Java堆5. 方法区二、具体实现上的一些问题1. JDK使用的虚拟机2. HotSpot中的方法区实现JDK7及之前的永久代JDK8的元空间引言JVM运行时数据区:Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,虚拟机规范中(注意,规范只是指导,具体的虚拟机在实现时会略有不同)把运行时数据区分成以下几部分:程序计数器、虚拟机栈、本地方法栈、堆、方法区;其中,程序计数

2020-07-08 18:18:03 86

原创 JDK7中的HashMap与ConcurrentHashMap

文章目录一、 JDK7中的HashMap1. 数据结构2. 属性2.1 成员变量源码2.2 加载因子2.3 modCount3. 初始化3.1 构造方法初始化变量3.2 put第一个元素时分配空间`inflateTable`方法:`roundUpToPowerOf2`方法4. 添加元素4.1 静态内部类Entry4.2 添加元素步骤`put`方法`addEntry`方法`createEntry`方法`putForNullKey`方法4.3 根据key值计算数组下标计算hash值计算index5. 扩容5.1

2020-07-08 14:58:58 174

原创 Java执行Callable任务

文章目录一、引言二、使用线程运行 Callable 任务得到返回结果2.1 不能直接运行2.2 Future 接口2.3 RunnableFuture 接口2.4 FutureTask 类2.5 示例: FutureTask + Thread 执行Callable任务三、使用线程池运行 Callable 任务得到返回结果3.1 Excutors类3.2 ExcutorService 接口3.3 示例:Future + ExcutorService 执行 Callable任务一、引言JDK1.0的 Th

2020-07-08 14:54:23 2071

原创 Redis五种对象详解

文章目录一、对象1.1 对象结构1.2 对象类型1.3 对象命令1.4 内存回收1.5 对象共享1.6 对象空转时长1.7 类型检查命令多态类型检查命令多态二、字符串对象2.1 存储结构int编码embstr编码raw编码2.2 编码选择与转换三、列表对象3.1 存储结构ziplist编码linkedlist编码3.2 编码转换四、哈希对象4.1 存储结构ziplist编码hashtable编码4.2 编码转换五、集合对象Set5.1 存储结构intset编码hashtable编码5.2 编码转换六、有序集

2020-06-05 15:07:11 353

原创 Redis六种存储结构详解

文章目录一、简单动态字符串SDS1.1 SDS结构1.2 SDS与C字符串的区别1.2.1 获取字符串长度的时间复杂度是O(1)1.2.2 杜绝缓冲区溢出1.2.3 减少修改字符串时带来的内存重分配次数1.2.4 二进制安全1.2.5 兼容部分C字符串函数二、链表2.1 节点结构2.2 链表结构三、字典3.1 字典的实现哈希节点哈希表字典3.2 链地址法存储3.3 收缩与扩容rehash3.4 扩容或收缩步骤3.5 渐进式rehash渐进式rehash的步骤:总结说明四、跳跃表4.1 有序链表4.2 跳跃表

2020-06-05 14:54:15 1482

原创 Redis主从复制过程详解

文章目录引言1. 相关命令2. 同步2.1 两种需要同步的情况2.2 两种同步方法2.3 `SYNC`和`PSYNC`命令`SYNC``PSYNC`2.4 部分重同步的实现服务器运行ID复制积压缓冲区复制偏移量2.5 PSYNC命令的实现3. 命令传播4. 复制的实现4.1 步骤1:设置主服务器的地址和端口4.2 步骤2:建立套接字连接4.3 步骤3:发送PING命令4.4 步骤4:身份验证4.5 步骤5:发送端口信息4.6 步骤6:同步4.7 步骤7:命令传播5. 心跳检测检测主从服务器的网络连接状态检测

2020-06-05 14:43:07 1077

原创 Java线程池详解

文章目录一、背景二、线程池 Executor 框架2.1 Executor (interface)2.1.1 源码介绍2.2 ExecutorService (interface)2.2.1 源码介绍2.2.2 生命周期方法说明2.3 ThreadPoolExecutor (class)2.3.1 构造方法源码2.3.2 线程创建流程说明2.3.3 注意事项三、 Executors 工厂类3.1 Executors 创建的几个常用的线程池3.1.1 固定数量线程池 FixedThreadPool3.1.2

2020-06-02 22:25:42 273

原创 Ubuntu下常用软件安装

ubuntu 安装软件的方法ubuntu安装软件有多种方法,常用的有一下几种apt-get install这种方式可以安装常用软件,如 git 当然其他软件在更新源后基本也基本都能安装这种方式安装的软件基本是最新版本,对于需要旧版本软件(如 solc)的情况,不建议使用这种安装方式上网下载安装包上网下载的安装包分为两种 :tar 包和 deb 包tar 包解压后即可使用,启动程序一般在解压文件的bin目录下tar 包解压的程序,为了能够在全局使用,需要将当前可执行命令的路径添加

2020-06-02 17:46:31 620

原创 私有链搭建之多节点连接

1、创建三个节点节点1// 初始化创世区块geth init genesis.json --datadir malakhChainA// 启动节点geth --networkid 123 --datadir malakhChainA --rpc --rpcaddr 192.168.72.130 --rpcport 7001 --port 2001节点2// 初始化创世区块geth init genesis.json --datadir malakhChainB// 启动节点ge

2020-06-02 17:42:33 1287 1

原创 ubuntu下区块链相关软件安装

一、安装gitsudo apt-get install git查看版本: git --version二、安装 gosudo apt-get install golang-go查看版本:go version三、安装gethsudo add-apt-repository -y ppa:ethereum/ethereumsudo apt-get updatesudo apt-get install ethereum查看版本: geth version四、安装 solc 0.4.2

2020-06-02 16:58:17 341

原创 Java连接区块链与调用智能合约

一、 编写智能合约test.solpragma solidity ^0.4.4;contract test { function multiply(uint a) public pure returns(uint d){ return a*7; } function sayHello() public pure returns(string){ return "hello"; }}二、 编译合约<1&

2020-06-02 16:49:30 3767

原创 Redis两种持久化方式关键点

文章目录引言一、RDB持久化1.1 RDB文件创建1.2 RDB文件载入1.3 save、bgsave、rewriteaof命令冲突处理1.4 自动间隔保存设置保存条件检查保存条件1.5 RDB的优缺点二、AOF持久化2.1 AOF持久化文件写入与同步配置2.2 AOF文件载入2.3 AOF重写AOF重写缓冲区2.4 优缺点参考文献引言Redis有两种数据持久化方式:RDB、AOFRDB(Redsi DataBase):基于数据快照,将内存中的数据库状态保存到磁盘上;AOF(Append Only

2020-06-02 16:23:33 192

空空如也

空空如也

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

TA关注的人

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