Clay 的技术空间

用进废退 | 艺不压身

大纲

前言

本文将介绍在三台服务器上,手动部署 Kafka-Eagle(EFAK)的集群服务,实现对 Kafka 集群的管理和监控,适用于 CentOS/Debian/Ubuntu 等发行版。

官方资源

阅读全文 »

大纲

编译与链接原理

提示

强烈建议在阅读完本节的内容后,多花点时间深入读一遍《深入理解计算机系统 - 第三版》的第 7 章 "链接"。

编译命令

步骤命令
1. 预处理 gcc -E hello.c -o hello.i
2. 编译到汇编代码 gcc -S hello.i -o hello.s
3. 汇编到目标代码(机器语言)gcc -c hello.s -o hello.o
4. 链接,生成可执行文件 gcc hello.o -o hello
以上四个步骤,可以合成一个步骤,直接编译链接成可执行的目标文件 gcc hello.c -o hello
阅读全文 »

前言

本教程将使用 Docker 安装单机版的 Seata Server、Nacos、MySQL,并实现以下配置目标:

  • (1) 配置 Seata Server 使用 Nacos 作为注册中心
  • (2) 配置 Seata Server 使用 Nacos 作为配置中心
  • (3) 配置 Nacos 将配置信息存储(持久化)到 MySQL 中
  • (4) 基于 Nacos 配置中心,配置 Seata Server 使用 MySQL 数据库来存储全局事务会话信息
阅读全文 »

大纲

前言

本文将介绍在 SpringBoot 项目中,如何基于 Redis + Lua 脚本 + AOP + 反射 + 自定义注解自研分布式限流组件,且支持拔插式使用。由于篇幅有限,下面使用的是 Redis 单机服务,若是在生产环境,为了保证系统的可用性,建议部署 Redis 集群,并使用 Redisson 作为 Redis 的客户端,这里不再累述。

阅读全文 »

大纲

MySQL 锁的介绍

锁的类型

在 MySQL 中,锁机制可以用来解决事务并发问题。MySQL 的锁有以下几种类型:

  • 按锁的粒度可以分为:
    • 行锁:锁住某行数据,锁粒度最小,并发度高。开销大,加锁慢,会出现死锁。
    • 表锁:锁住整张表,锁粒度较大,并发度低。开销小,加锁快,不会出现死锁。
    • 间隙锁:锁住的是一个区间。
    • 全局锁:锁住整个数据库,锁粒度最大。
阅读全文 »

大纲

最左前缀原则的介绍

最左前缀原则指的是:使用组合索引(联合索引)时,查询条件需要从索引的最左列开始匹配,并且不跳过索引中的列。如果跳跃某一列,索引将会部分失效 (这一列后面的字段的索引会失效)。比如,针对 A、B、C 三个字段建立了一个组合索引,那么在写一个 SQL 时就一定要提供 A 字段的查询条件,这样才能让组合索引生效。这是由于在建立 A、B、C 三个字段的组合索引时,MySQL 底层的 B+ 树是按照 A、B、C 三个字段从左往右去比较大小进行排序的,也就是说 B+ 树的索引结构依赖于从左到右逐层递进地有序搜索路径。如果查询条件中缺少了最左边的列,B+ 树将无法确定初始的搜索路径,从而无法利用索引进行高效查询。

阅读全文 »

大纲

索引的介绍

索引概述

MySQL 官方对索引的定义为:索引(Index)是帮助 MySQL 高效获取数据的数据结构。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。简而言之,索引的本质是数据结构

阅读全文 »

查看整机系统性能

top

使用 top 命令,可以查看系统的负载情况,重点关注的是 %CPU%MEMload average 三个性能指标。

1
top
阅读全文 »

前言

官方文档

SpringBoot 整合 Kafka

本节将介绍 SpringBoot 项目如何整合 Kafka,包括发送消息到 Kafka 和从 Kafka 消费消息。值得一提的是,本节给出的配置和代码同样适用于 SpringCloud 项目整合 Kafka,具体案例请看 这里

代码下载

本节所需的案例代码,可以直接从 GitHub 下载对应章节 kafka-lesson-19

阅读全文 »