Merge remote-tracking branch 'origin/master'

master
土豆兄弟 2 years ago
commit d082fdeae1

@ -0,0 +1,9 @@
## 快速上传文件方法
```shell
# 安装快速上传文件的工具
yum install -y lrzsz
# 输入 进行快速选择
rz
```

@ -0,0 +1,12 @@
# ClickHouse 精通
## 1. ClickHouse基础
- 官方QuickStart:
- 官方文档:
- 最新版本 【截止2022-7-20】
- 学习版本 【截止2022-7-20】
## 2.

@ -0,0 +1,37 @@
# Flink 整理
## 1. 基础认知
- 官方QuickStart:
- 官方文档:
- 最新版本 【截止2022-7-20】
- 学习版本 【截止2022-7-20】
## 2. 本地开发入门
## 3. Flink 部署
## 4. Flink 实时处理核心API研究
## 5. Flink 时间语义及Window API
## 6. Flink Watermark
## 7. Flink 状态管理
## 8. Flink DataSet
## 9. Flink Table & SQL API
## 10. Flink 版本升级

@ -0,0 +1,46 @@
### Example user template template
### Example user template
# IntelliJ project files
.idea
*.iml
out
gen
### Maven template
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
# https://github.com/takari/maven-wrapper#usage-without-binary-jar
.mvn/wrapper/maven-wrapper.jar
### Java template
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*

@ -0,0 +1,106 @@
# Kafka
## 1. Kafka基本概念及配置
- 官方QuickStart: https://kafka.apache.org/quickstart
- 官方文档: https://kafka.apache.org/documentation/
- 最新版本 3.2.0 【截止2022-7-20】
- 学习版本 kafka_2.11-2.4.0【前面是scala后面是kafka】 zookeeper-3.5.7【截止2022-7-20】
### 1.1 概念
- 概述
- Kafka 是分布式的流处理平台
- Kafka 是基于Zookeeper的分布式消息系统
- Kafka具有高吞吐率、高性能、实时、高可靠等特点
- Kafka 的组成概念
- Topic: 一个虚拟的概念, 由1到多个Partitions组成
- Partition: 实际消息存储单位
- Producer: 消息生产者
- Consumer: 消息消费者
-
### 1.2 安装Zookeeper(快捷)
```shell
# 修改配置文件
cp zoo_sample.cfg zoo.cfg
# 需要修改参数
dataDir=指定一个存储配置文件的目录
# 启动
./zkServer.sh start
# 连接测试
./zkCli.sh
```
### 1.3 安装Kafka
```shell
# 修改基本的配置文件
vim server.properties
# 需要修改的配置项
listeners=PLAINTEXT://[你的ip地址]:9092
advertised.listeners=PLAINTEXT://[你的ip地址]:9092
log.dirs=你的kafka的日志目录
zookeeper.connect=[你的ip地址]:2181
```
### 1.5 kafka的基本操作
```shell
# 1、启动Kafka - todo 这个命令会让控制台有日志生成不太方便
bin/kafka-server-start.sh config/server.properties &
# 2、停止Kafka
bin/kafka-server-stop.sh
# 3、创建Topic
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic jiangzh-topic
# 4、查看已经创建的Topic信息
bin/kafka-topics.sh --list --zookeeper localhost:2181
# 5、发送消息
bin/kafka-console-producer.sh --broker-list 192.168.220.128:9092 --topic jiangzh-topic
# 6、接收消息
bin/kafka-console-consumer.sh --bootstrap-server 192.168.220.128:9092 --topic jiangzh-topic --from-beginning
# {"orderId":"002","price":"80"}
```
## 2. Kafka客户端操作
## 3. Producer生产者
## 4. Consumer
## 5. Stream
## 6. Connect
## 7. Kafka集群部署与开发
## 8. Kafka集群监控、安全与最佳实践
## 9. Kafka面试点梳理

@ -0,0 +1,175 @@
# RabbitMQ
## 1. RabbitMQ 基础
- 官方QuickStart:
- 官方文档:
- 最新版本 【截止2022-7-20】
- 学习版本 【截止2022-7-20】
### 1.1 概念及问题
- 中间件: (Middleware), 是提供软件和软件之间连接的软件, 以便于软件各部分之间的沟通
- 同步调用的问题
- 业务调用链过长, 用户等待时间长
- 部分组件故障会瘫痪整个业务
- 业务高峰期没有缓冲
- 异步调用的问题
- 解决了同步调用的问题
- 业务高峰期时产生大量的异步线程, 造成线程池不够用或内存爆满
- 使用中间件的优势
- 业务调用链短, 用户等待时间短
- 部分组件故障不会瘫痪整个业务
- 业务高峰期有缓冲
- 业务高峰期不会产生大量的异步线程
- 消息中间件的作用
- 异步处理
- 系统解耦
- 流量的削峰和流控
- 消息广播
- 消息收集
- 最终一致性
### 1.2 消息中间件的技术选型
- ActiveMQ
- 由Apache出品, Java开发, 支持JMS1.1协议和J2EE1.4规范
- 支持广泛的连接协议: OpenWire/STOMP/REST/XMPP/AMQP
- 支持多种语言客户端, 支持插件
- 管理方便, 便于配置集群代理
- 优点:
- A>. 基于Java, 跨平台运行
- B>. 可以用JDBC连接多种数据库
- C>. 有完善的界面, 监控, 安全机制
- D>. 自动重连和错误重试
- 缺点:
- A>. 社区活跃度不高
- B>. 目前重点放到6.0产品Apollo, 对5的Bug维护较少
- C>. 不适合用于上千个队列的应用场景
- RabbitMQ
- 当前国内最主流的消息中间件
- 高可靠性, 支持发送确认, 投递确认等特性
- 高可用, 支持镜像队列
- 支持插件
- 优点:
- A>. 基于Erlang, 支持高并发
- B>. 支持多平台, 多种客户端, 文档齐全
- C>. 可靠性高
- D>. 在互联网公司有较大规模的应用, 社区活跃度高
- 缺点:
- A>. Erlang语言较为小众, 不利于二次开发
- B>. 代理架构下, 中央节点增加了延迟, 影响性能
- C>. 使用AMQP协议, 使用起来有学习成本
- RocketMQ
- 阿里巴巴团队开发, 经受住双十一的考验
- 能够保证严格的消息顺序
- 亿级的消息堆积能力
- 丰富的消息拉取模式
- 优点:
- A>. 基于Java, 跨平台运行, 方便二次开发
- B>. 单机支持1万以上持久化队列
- C>. 内存与硬盘都有一份数据, 保证性能+高可用
- C>. 开发度较活跃, 版本更新很快
- 缺点:
- A>. 客户端种类不多, 较成熟的是Java及C++
- B>. 运维复杂
- C>. 我觉得没缺点 (*^▽^*)
- Kafka
- Linkedln 开发的分布式日志提交系统
- 独特的分区特性, 适用于大数据系统
- 性能高效, 可扩展性良好
- 可复制, 可容错
- 优点:
- A>. 原生的分布式系统
- B>. 零拷贝技术, 减少IO操作步骤, 提高系统吞吐量
- C>. 快速持久化, 可以在O(1)的系统开销下进行消息持久化
- D>. 支持数据批量发送和拉取
- 缺点:
- A>. 单机超过64个队列/分区时, 性能明显劣化
- B>. 使用轮询方式, 实时性取决于轮询间隔时间
- C>. 消费失败不支持重试
- D>. 可靠性比较差(不适合做业务系统,适合做大数据和日志系统)
### 1.3 RabbitMQ 高性能的原因
- Erlang
- 由爱立信公司开发(Ericsson Language)
- 一门为交换机软件开发诞生的编程语言
- 特点
- 通用的面向开发的编程语言, 适用于分布式系统
- 基于虚拟机解释运行, 跨平台部署
- 进程间上下文切换的频率远高于C语言
- 有着和原生Socket一样的延迟
- RabbitMQ应用
- 互联网TMD都在用
- RabbitMQ在银行和金融领域也有相当高的占有率, 甚至微服务之间的通信大部分都是依靠消息,RabbitMQ 使用量最大
### 1.4 AMQP 协议
- 意义:
- AMQP协议作为RabbitMQ的规范, 规定了RabbitMQ对外接口
- 学会了AMQP使用就基本会了RabbitMQ
```java
[Connection] [Connection]
—————————— ———————————————————————————————————————— ——————————
| Channel | | ———————————————————————————————— | | Channel |
Publisher ---> RoutingKey[Message] --> | Channel |--> | | Exchange----(Binding)---->Queue | |--> | Channel | --> Consumer
| Channel | | | | | | Channel |
—————————— | | Exchange----(Binding)---->Queue | | ——————————
| | | | |
| | -(Binding)---->Queue | |
| | [Virtual Host] | |
| ———————————————————————————————— |
| [Message Broker] |
————————————————————————————————————————
```
- Broker: 接收和分发消息的应用, RabbitMQ就是Message Broker
- Virtual Host: 虚拟Broker, 将多个单元隔离开
- Connection: publisher/consumer和broker之间的TCP连接, 在物理上也是存在的
- Channel: connection 内部建立的逻辑连接通常每个线程创建单独channel
- Routing key: 路由键, 用来指示消息的路由转发, 相当于快递的地址
- Exchange: 交换机, 相当于快递的分拨中心
- 在AMQP协议或者是RabbitMQ实现中, 最核心的组件是Exchange
- Exchange承担RabbitMQ的核心功能————路由转发
- Exchange有多个种类, 配置多变, 需要详细讲解
- Queue: 消息队列, 消息最终被送到这里等待consumer取走
- Binding: exchange和queue之间的虚拟连接, 用于message的分发依据
### 1.5 RabbitMQ核心-Exchange解析
- Exchange的功能是根据绑定关系和路由键为消息提供路由将消息转发至相应的队列
- Exchange有4种类型: Direct/Topic/Fanout/Headers,其中Headers使用很少,以前3种为主
#### A. Direct Exchange
- Message中的Routing Key如果和BindingKey一致, Direct Exchange则将message发到对应的queue中
```java
Routing Key -->
```
## 2. RabbitMQ基本用法开发项目
## 3. 利用RabbitMQ高级特性完善项目的可靠性
## 4. RabbitMQ与SpringBoot适配利用工具类简化项目
## 5. RabbitMQ集群入门——手动搭建集群并容灾实验
## 6. RabbitMQ集群高可用
## 7. 基于RabbitMQ开发分布式事务框架

@ -0,0 +1 @@
file/** filter=lfs diff=lfs merge=lfs -text

@ -0,0 +1,103 @@
# RocketMQ
## 1. RocketMQ 基础
- 官方QuickStart: https://github.com/apache/rocketmq/tree/master/docs/cn
- 官方文档: https://rocketmq.apache.org/docs/
- 最新版本 4.9.4 【截止2022-7-20】
- 学习版本 4.3.0 【截止2022-7-20】
### 1.1 整体介绍
- RocketMQ是一款分布式、队列模型的消息中间件
- 特性:
- 支持分布式事物
- 支持集群模型、负载均衡、水平扩展能力
- 亿级别的消息堆积能力
- 采用零拷贝的原理、顺序写盘、随机读
- 丰富的API封装
- 代码优秀底层通信框架采用Netty NIO框架
- NameServer代替Zookeeper
- 集群无单点,可扩展,任意一点高可用,水平可扩展
- 消息失败重试机制,消息可查询
- 开源社区活跃、成熟度(经过双十一考验)
### 1.2 概念模型
- Producer: 消息生产者,负责生产消息,一般由业务系统负责产生消息
---
- Consumer: 消息消费者,负责消费消息,一般是后台系统负责异步消费
- Push Consumer: Consumer的一种, 需要向Consumer对象注册监听
- Pull Consumer: Consumer的一种, 需要主动请求Broker拉取消息
---
- Producer Group: 生产者集合, 一般用于发送一类消息
- Consumer Group: 消费者集合, 一般用于接收一类消息进行消费
---
- Broker: MQ消息服务(中转角色, 用于消息存储与生产消费转发)
- Message: TODO
### 1.3 源码工程讲解
- 编译完成的文件在 rocket-distribution/target/ 下
- RocketMQ的源码结构
- rocketmq-broker: 主要的业务逻辑, 消息收发, 主从同步, pagecache
- rocketmq-client: 客户端接口, 比如生产者和消费者
- rocketmq-example: 示例, 比如生产者和消费者
- rocketmq-common: 公用数据结构等等
- rocketmq-distribution: 编译模块, 编译输出等
- rocketmq-filter: 进行Broker过滤的不感兴趣的消息传输,减小带宽压力
- rocketmq-logappender, rocketmq-logging 日志相关
- rocketmq-namesrv Namesrv服务, 用于服务协调
- rocketmq-openmessaging 对外提供服务
- rocketmq-remoting 远程调用接口, 封装Netty底层通信
- rocketmq-util 提供一些公用的工具方法, 比如解析命令行参数
- rocketmq-store 消息存储
- rocketmq-test
- rocketmq-tools 管理工具, 比如有名的mqadmin工具
### 1.4 环境搭建
- 参考 RocketMQ使用手册.pdf
- ps: 内存大小至少也要1GB
- ps: 先启动NameSrv 再启动Broker
- ps: 测试使用1个配置文件即可
### 1.5 RocketMQ 控制台使用
- RocketMQ 扩展组件: https://github.com/apache/rocketmq-externals
- 可以集成控制台,修改控制台即可
- 集成SpringBoot也在这里
## 2. RocketMQ 生产者核心研究
## 3. RocketMQ 消费者核心研究
## 4. RocketMQ 核心原理研究
## 5. 双主双从部署
## 6. 购物车、订单与支付场景抗压实战 -> 可以移步到
## 7. RocketMQ分布式事务消息
## 8. RocketMQ顺序消费与微服务解耦
## 9. 数据过滤与性能提升

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save