tonglin0325的个人主页

kafka-ui部署

1.介绍

kafka-ui是一个开源的kafka ui工具,支持kafka,schema registry(avro和protobuf都支持),kafka connect,KSQL DB等组件

github项目

1
2
https://github.com/provectus/kafka-ui

docker镜像地址

1
2
https://hub.docker.com/r/provectuslabs/kafka-ui

注意:该kafka-ui只支持2.x.x版本的kafka,对于低版本的kafka不支持,参考issue:https://github.com/provectus/kafka-ui/issues/2097

界面如下

其中schema registry的schema类型支持AVRO,JSON和PROTOBUF

全文 >>

mac安装go1.20

官方下载地址

1
2
https://go.dev/dl/

1.下载pkg版本的安装包,直接双击安装,比如

1
2
https://go.dev/dl/go1.20.12.darwin-amd64.pkg

这时默认的GOPATH路径(go依赖的下载路径)在~/go

2.也可以下载tar的压缩包进行安装

下载mac对应的安装版,intel版本的mac下载x86版本

1
2
https://go.dev/dl/go1.20.12.darwin-amd64.tar.gz

解压到/usr/local目录

1
2
sudo tar -xzvf go1.20.12.darwin-amd64.tar.gz -C /usr/local

配置环境变量

1
2
3
4
5
6
7
# go
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export GO111MODULE=on
export GOPROXY=http://goproxy.cn,direct
export PATH=$GOROOT/bin:$GOPATH/bin:$PATH

其中

1
2
3
GOPATH: go工作区, 下载的依赖会存放在此目录中,默认会在~/go目录下
GOROOT: go的安装目录

GOPATH工作区目录下,有3个目录

1
2
3
4
bin: 存储可执行bin文件
pkg: 编译完成的文件
src: 源代码文件

source配置

1
2
source ~/.bash_profile

验证安装版本

1
2
3
go version
go version go1.20.12 darwin/amd64

参考:mac下安装go开发环境

如果在Goland中遇到报错:Unresolved dependency

全文 >>

Redis学习笔记——应用场景

redis共有5种基本数据类型:

String(可以是字符串,整数或者浮点数)

Hash(哈希,Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)

Redis Hash 类型底层有两种编码格式:ziplist、hashtable,当哈希对象同时满足以下两种条件时,对象使用 ziplist 编码;不能满足则使用 hashtable 编码。

  • 哈希对象保存的所有键值对的键和值的字符串长度都小于 64 字节;
  • 哈希对象保存的键值对数量小于 512 个。

这里是可以由使用者自定义进行控制的,redis提供了这么几个参数:

hash-max-ziplist-value 64 // ziplist中最大能存放的值长度

hash-max-ziplist-entries 512 // ziplist中最多能存放的

List(列表)

Set(集合)、

Zset(有序集合)

随着 Redis 版本的更新,后面又支持了四种数据类型: BitMap(2.2 版新增)、HyperLogLog(2.8 版新增)、GEO(3.2 版新增)、Stream(5.0 版新增)

参考:16个 Redis 常见使用场景

1.string(字符串)#

1.session#

在多个应用之间共享数据

2.cache#

热点数据缓存

3.分布式锁#

只有redis的key不存在的时候,才能获得这个锁

2.string(数值类型)#

1.counter#

int类型,incr方法,例如:文章的阅读量、微博点赞数、允许一定的延迟,先写入Redis再定时同步到数据库

2.限流器#

int类型,incr方法,以访问者的ip和其他信息作为key,访问一次增加一次计数,超过次数则返回false

3.全局ID生成器#

场景:用于保证分库分表之后主键的全局唯一性,参考:10丨发号器:如何保证分库分表后 ID 的全局唯一性?

3.hash#

1.购物车#

选择 hash 的话,每个用户的购物车对应一个 hash 对象,field 存的是skuID,value 存的是购物车单种sku总量。hash 的底层编码是 ziplisthashtable

除了hash,其它的数据类型,都需要 get 出来计算后 set 回去,有的还需保存加入购物车时间 来排序。用来做购物车还是可以的,就是有点小麻烦,也没有充分利用 Redis 的数据类型(充分利用的话性能有很大的优势);而 hash 就不一样了,我们满足它以 ziplist编码的条件,它就是**有序的了 ,不需要额外计算,可以直接使用 Redis 命令来完成对购物车的维护,性能上无疑达到了最优**。

参考:SpringBoot2 | 第二十九篇:Redis 实现购物车

4.bitmap#

1.在线用户统计,留存用户统计#

因为bit非常节省空间(1 MB=8388608 bit),可以用来做大数据量的统计。

Redis的位图就是一个由二进制位组成的数组, 通过将数组中的每个二进制位与用户 ID 进行一一对应, 我们可以使用位图去记录每个用户是否在线。

参考:使用redis中的位图(bitmap)统计在线人数

5.list#

1.消息队列#

使用LPUSH指令来进行入列操作,使用RPOP指令来进行出列操作

参考:Redis系列14:使用List实现消息队列

6.zset#

1.排行榜#

参考:redis zset实现排行榜

2.最近浏览功能#

使用redis的list和zset都可以实现

list实现参考:使用 Redis 缓存来实现用户最近浏览的商品列表

zset实现参考:如何实现类似知乎的功能查看最近1000条记录呢?

参考:Redis经典案例场景

Flink学习笔记——Flink Mongo CDC

Flink CDC提供了一系列connector,用于从其他数据源获取变更数据(change data capture)

官方文档

1
2
https://ververica.github.io/flink-cdc-connectors/release-2.3/content/about.html

官方github

1
2
https://github.com/ververica/flink-cdc-connectors

各种数据源使用案例,参考:

基于 AWS S3、EMR Flink、Presto 和 Hudi 的实时数据湖仓 – 使用 EMR 迁移 CDH

Flink CDC关于source和sink全调研及实践

官方文档和原理,参考:Flink CDC MongoDB Connector 的实现原理和使用实践

1
2
https://ververica.github.io/flink-cdc-connectors/release-2.3/content/connectors/mongodb-cdc.html#

Flink CDC 2.1.0开始,支持了Mongo CDC的connector,flink Mongo cdc的connector和flink MySQL cdc不同,是基于MongoDB的change stream,并不基于Debezium(Debezium Mongo Connector读取的是oplog)。

参考:https://nightlies.apache.org/flink/flink-cdc-docs-release-3.1/docs/connectors/flink-sources/mongodb-cdc/#change-streams

截止2023年中,最新的版本是2.3.0,相比2.2.0,2.3.0版本主要新增了Incremental Snapshot的特性(在snapshot阶段支持断点续传和并发同步),且要求至少mongo 4.0版本,这样就可以解决大表在第一次snapshot同步的时候,一旦失败就得重头再开始同步的问题,以及之前只能单并发同步很慢的问题

具体新增的特性可以查看release:https://github.com/ververica/flink-cdc-connectors/releases

全文 >>

Hive学习笔记——函数

1.cast函数

数据类型转换函数

比如date的值为

参考:Hive中CAST()函数用法

2.explode函数

explode() 函数接收一个 array 或 map 作为输入,然后将 array 或 map 里面的元素按照每行的形式输出。其可以配合 LATERAL VIEW 一起使用

参考:Hive应用:explode和lateral view

3.lateral view

lateral view用于和split、explode等UDTF一起使用的,能将一行数据拆分成多行数据,在此基础上可以对拆分的数据进行聚合,lateral view首先为原始表的每行调用UDTF,UDTF会把一行拆分成一行或者多行,lateral view在把结果组合,产生一个支持别名表的虚拟表。

4.json_tuple

参考:一文学会Hive解析Json数组(好文收藏)

5.json UDF

brickhouse的json udf

1.brickhouse.udf.json.ToJsonUDF,将hive表转换成json

1
2
3
4
5
6
7
8
9
10
add jar /path/brickhouse-0.7.0-SNAPSHOT.jar;

CREATE TEMPORARY FUNCTION to_json AS 'brickhouse.udf.json.ToJsonUDF';

select to_json(named_struct( 'name', a.col_1, 'children' , array(named_struct('name', b.col_2, 'logins', b.col_3))))
from table_a a join table_b b on a.col_1 = b.col_1;

{"name":"userLogins","children":[{"name":"Site B","logins":20}]}
{"name":"userLogins","children":[{"name":"Site A","logins":10}]}

参考

1
2
https://stackoverflow.com/questions/25188734/converting-data-from-multiple-hive-tables-to-complex-json

2.brickhouse.udf.json.JsonMapUDF,将json的map转换成hive的map

1
2
3
4
add jar /path/brickhouse-0.7.0-SNAPSHOT.jar;

CREATE TEMPORARY FUNCTION json_map AS 'brickhouse.udf.json.JsonMapUDF';

3.brickhouse.udf.json.JsonSplitUDF,将json的value切分成hive的array,比如 {“a”:null,”b”:”40573”} => [null,”40573”]

1
2
3
4
add jar /path/brickhouse-0.7.0-SNAPSHOT.jar;

CREATE TEMPORARY FUNCTION json_split AS 'brickhouse.udf.json.JsonSplitUDF';

6.开窗函数

ROW_NUMBER() OVER 顺序排序。

RANK() OVER 跳跃排序,如果有两个第一级别时,接下来是第三级别。

DENSE_RANK() OVER

全文 >>

Spring MVC学习笔记——给Controller和视图传值

**  一、给Controller传值,值将显示在控制台**

  1.第一种:使用@RequestParam,改HelloController.java

1
2
3
4
5
6
7
8
//RequestMapping表示用哪一个url来对应
@RequestMapping({"/hello","/"})
public String hello(@RequestParam("username") String username){
System.out.println("hello");
System.out.println(username);
return "hello";
}

全文 >>