Skip to content

Commit b1aa12b

Browse files
committed
合并Master分支
2 parents 9f6882c + 42195c3 commit b1aa12b

File tree

108 files changed

+2402
-910
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

108 files changed

+2402
-910
lines changed

.github/workflows/ci_build.yml

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
name: KnowStreaming Build
2+
3+
on:
4+
push:
5+
branches: [ "master", "ve_3.x", "ve_demo_3.x" ]
6+
pull_request:
7+
branches: [ "master", "ve_3.x", "ve_demo_3.x" ]
8+
9+
jobs:
10+
build:
11+
12+
runs-on: ubuntu-latest
13+
14+
steps:
15+
- uses: actions/checkout@v3
16+
17+
- name: Set up JDK 11
18+
uses: actions/setup-java@v3
19+
with:
20+
java-version: '11'
21+
distribution: 'temurin'
22+
cache: maven
23+
24+
- name: Setup Node
25+
uses: actions/setup-node@v1
26+
with:
27+
node-version: '12.22.12'
28+
29+
- name: Build With Maven
30+
run: mvn -Prelease-package -Dmaven.test.skip=true clean install -U
31+
32+
- name: Get KnowStreaming Version
33+
if: ${{ success() }}
34+
run: |
35+
version=`mvn -Dexec.executable='echo' -Dexec.args='${project.version}' --non-recursive exec:exec -q`
36+
echo "VERSION=${version}" >> $GITHUB_ENV
37+
38+
- name: Upload Binary Package
39+
if: ${{ success() }}
40+
uses: actions/upload-artifact@v3
41+
with:
42+
name: KnowStreaming-${{ env.VERSION }}.tar.gz
43+
path: km-dist/target/KnowStreaming-${{ env.VERSION }}.tar.gz

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@
9090
- [单机部署手册](docs/install_guide/单机部署手册.md)
9191
- [版本升级手册](docs/install_guide/版本升级手册.md)
9292
- [本地源码启动手册](docs/dev_guide/本地源码启动手册.md)
93+
- [页面无数据排查手册](docs/dev_guide/页面无数据排查手册.md)
9394

9495
**`产品相关手册`**
9596

@@ -155,3 +156,4 @@ PS: 提问请尽量把问题一次性描述清楚,并告知环境信息情况
155156
## Star History
156157

157158
[![Star History Chart](https://api.star-history.com/svg?repos=didi/KnowStreaming&type=Date)](https://star-history.com/#didi/KnowStreaming&Date)
159+

docs/contribute_guide/贡献指南.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,13 @@
4747

4848
**1、`Header` 规范**
4949

50-
`Header` 格式为 `[Type]Message(#IssueID)`, 主要有三部分组成,分别是`Type``Message``IssueID`
50+
`Header` 格式为 `[Type]Message`, 主要有三部分组成,分别是`Type``Message`
5151

5252
- `Type`:说明这个提交是哪一个类型的,比如有 Bugfix、Feature、Optimize等;
5353
- `Message`:说明提交的信息,比如修复xx问题;
54-
- `IssueID`:该提交,关联的Issue的编号;
5554

5655

57-
实际例子:[`[Bugfix]修复新接入的集群,Controller-Host不显示的问题(#927)`](https://github.com/didi/KnowStreaming/pull/933/commits)
56+
实际例子:[`[Bugfix]修复新接入的集群,Controller-Host不显示的问题`](https://github.com/didi/KnowStreaming/pull/933/commits)
5857

5958

6059

@@ -67,7 +66,7 @@
6766
**3、实际例子**
6867

6968
```
70-
[Optimize]优化 MySQL & ES 测试容器的初始化(#906)
69+
[Optimize]优化 MySQL & ES 测试容器的初始化
7170
7271
主要的变更
7372
1、knowstreaming/knowstreaming-manager 容器;
@@ -138,7 +137,7 @@
138137
1. 切换到主分支:`git checkout github_master`
139138
2. 主分支拉最新代码:`git pull`
140139
3. 基于主分支拉新分支:`git checkout -b fix_928`
141-
4. 提交代码,安装commit的规范进行提交,例如:`git commit -m "[Optimize]优化xxx问题(#928)"`
140+
4. 提交代码,安装commit的规范进行提交,例如:`git commit -m "[Optimize]优化xxx问题"`
142141
5. 提交到自己远端仓库:`git push --set-upstream origin fix_928`
143142
6. `GitHub` 页面发起 `Pull Request` 请求,管理员合入主仓库。这部分详细见下一节;
144143

@@ -162,6 +161,8 @@
162161

163162
### 4.1、如何将多个 Commit-Log 合并为一个?
164163

165-
可以使用 `git rebase -i` 命令进行解决。
164+
可以不需要将多个commit合并为一个,如果要合并,可以使用 `git rebase -i` 命令进行解决。
165+
166+
166167

167168

-382 KB
Binary file not shown.
Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
1+
2+
![Logo](https://user-images.githubusercontent.com/71620349/185368586-aed82d30-1534-453d-86ff-ecfa9d0f35bd.png)
3+
4+
---
5+
6+
# 接入 ZK 带认证的 Kafka 集群
7+
8+
- [接入 ZK 带认证的 Kafka 集群](#接入-zk-带认证的-kafka-集群)
9+
- [1、简要说明](#1简要说明)
10+
- [2、支持 Digest-MD5 认证](#2支持-digest-md5-认证)
11+
- [3、支持 Kerberos 认证](#3支持-kerberos-认证)
12+
13+
14+
15+
## 1、简要说明
16+
17+
- 1、当前 KnowStreaming 暂无页面可以直接配置 ZK 的认证信息,但是 KnowStreaming 的后端预留了 MySQL 的字段用于存储 ZK 的认证信息,用户可通过将认证信息存储至该字段,从而达到支持接入 ZK 带认证的 Kafka 集群。
18+
 
19+
20+
- 2、该字段位于 MySQL 库 ks_km_physical_cluster 表中的 zk_properties 字段,该字段的格式是:
21+
```json
22+
{
23+
"openSecure": false, # 是否开启认证,开启时配置为true
24+
"sessionTimeoutUnitMs": 15000, # session超时时间
25+
"requestTimeoutUnitMs": 5000, # request超时时间
26+
"otherProps": { # 其他配置,认证信息主要配置在该位置
27+
"zookeeper.sasl.clientconfig": "kafkaClusterZK1" # 例子,
28+
}
29+
}
30+
```
31+
32+
- 3、实际生效的代码位置
33+
```java
34+
// 代码位置:https://github.com/didi/KnowStreaming/blob/master/km-persistence/src/main/java/com/xiaojukeji/know/streaming/km/persistence/kafka/KafkaAdminZKClient.java
35+
36+
kafkaZkClient = KafkaZkClient.apply(
37+
clusterPhy.getZookeeper(),
38+
zkConfig.getOpenSecure(), // 是否开启认证,开启时配置为true
39+
zkConfig.getSessionTimeoutUnitMs(), // session超时时间
40+
zkConfig.getRequestTimeoutUnitMs(), // request超时时间
41+
5,
42+
Time.SYSTEM,
43+
"KS-ZK-ClusterPhyId-" + clusterPhyId,
44+
"KS-ZK-SessionExpireListener-clusterPhyId-" + clusterPhyId,
45+
Option.apply("KS-ZK-ClusterPhyId-" + clusterPhyId),
46+
Option.apply(this.getZKConfig(clusterPhyId, zkConfig.getOtherProps())) // 其他配置,认证信息主要配置在该位置
47+
);
48+
```
49+
50+
- 4、SQL例子
51+
```sql
52+
update ks_km_physical_cluster set zk_properties='{ "openSecure": true, "otherProps": { "zookeeper.sasl.clientconfig": "kafkaClusterZK1" } }' where id=集群1的ID;
53+
```
54+
55+
56+
- 5、zk_properties 字段不能覆盖所有的场景,所以实际使用过程中还可能需要在此基础之上,进行其他的调整。比如,`Digest-MD5 认证``Kerberos 认证` 都还需要修改启动脚本等。后续看能否通过修改 ZK 客户端的源码,使得 ZK 认证的相关配置能和 Kafka 认证的配置一样方便。
57+
58+
59+
---
60+
61+
62+
## 2、支持 Digest-MD5 认证
63+
64+
1. 假设你有两个 Kafka 集群, 对应两个 ZK 集群;
65+
2. 两个 ZK 集群的认证信息如下所示
66+
67+
```bash
68+
# ZK1集群的认证信息,这里的 kafkaClusterZK1 可以是随意的名称,只需要和后续数据库的配置对应上即可。
69+
kafkaClusterZK1 {
70+
org.apache.zookeeper.server.auth.DigestLoginModule required
71+
username="zk1"
72+
password="zk1-passwd";
73+
};
74+
75+
# ZK2集群的认证信息,这里的 kafkaClusterZK2 可以是随意的名称,只需要和后续数据库的配置对应上即可。
76+
kafkaClusterZK2 {
77+
org.apache.zookeeper.server.auth.DigestLoginModule required
78+
username="zk2"
79+
password="zk2-passwd";
80+
};
81+
```
82+
83+
3. 将这两个ZK集群的认证信息存储到 `/xxx/zk_client_jaas.conf` 文件中,文件中的内容如下所示:
84+
85+
```bash
86+
kafkaClusterZK1 {
87+
org.apache.zookeeper.server.auth.DigestLoginModule required
88+
username="zk1"
89+
password="zk1-passwd";
90+
};
91+
92+
kafkaClusterZK2 {
93+
org.apache.zookeeper.server.auth.DigestLoginModule required
94+
username="zk2"
95+
password="zk2-passwd";
96+
};
97+
98+
```
99+
100+
4. 修改 KnowStreaming 的启动脚本
101+
102+
```bash
103+
# `KnowStreaming/bin/startup.sh` 中的 47 行的 JAVA_OPT 中追加如下设置
104+
105+
-Djava.security.auth.login.config=/xxx/zk_client_jaas.conf
106+
```
107+
108+
5. 修改 KnowStreaming 的表数据
109+
110+
```sql
111+
# 这里的 kafkaClusterZK1 要和 /xxx/zk_client_jaas.conf 中的对应上
112+
update ks_km_physical_cluster set zk_properties='{ "openSecure": true, "otherProps": { "zookeeper.sasl.clientconfig": "kafkaClusterZK1" } }' where id=集群1的ID;
113+
114+
update ks_km_physical_cluster set zk_properties='{ "openSecure": true, "otherProps": { "zookeeper.sasl.clientconfig": "kafkaClusterZK2" } }' where id=集群2的ID;
115+
```
116+
117+
6. 重启 KnowStreaming
118+
119+
120+
---
121+
122+
123+
## 3、支持 Kerberos 认证
124+
125+
**第一步:查看用户在ZK的ACL**
126+
127+
假设我们使用的用户是 `kafka` 这个用户。
128+
129+
- 1、查看 server.properties 的配置的 zookeeper.connect 的地址;
130+
- 2、使用 `zkCli.sh -serve zookeeper.connect的地址` 登录到ZK页面;
131+
- 3、ZK页面上,执行命令 `getAcl /kafka` 查看 `kafka` 用户的权限;
132+
133+
此时,我们可以看到如下信息:
134+
![watch_user_acl.png](assets/support_kerberos_zk/watch_user_acl.png)
135+
136+
`kafka` 用户需要的权限是 `cdrwa`。如果用户没有 `cdrwa` 权限的话,需要创建用户并授权,授权命令为:`setAcl`
137+
138+
139+
**第二步:创建Kerberos的keytab并修改 KnowStreaming 主机**
140+
141+
- 1、在 Kerberos 的域中创建 `kafka/_HOST``keytab`,并导出。例如:`kafka/dbs-kafka-test-8-53`
142+
- 2、导出 keytab 后上传到安装 KS 的机器的 `/etc/keytab` 下;
143+
- 3、在 KS 机器上,执行 `kinit -kt zookeepe.keytab kafka/dbs-kafka-test-8-53` 看是否能进行 `Kerberos` 登录;
144+
- 4、可以登录后,配置 `/opt/zookeeper.jaas` 文件,例子如下:
145+
```bash
146+
Client {
147+
com.sun.security.auth.module.Krb5LoginModule required
148+
useKeyTab=true
149+
storeKey=false
150+
serviceName="zookeeper"
151+
keyTab="/etc/keytab/zookeeper.keytab"
152+
principal="kafka/dbs-kafka-test-8-53@XXX.XXX.XXX";
153+
};
154+
```
155+
- 5、需要配置 `KDC-Server``KnowStreaming` 的机器开通防火墙,并在KS的机器 `/etc/host/` 配置 `kdc-server``hostname`。并将 `krb5.conf` 导入到 `/etc` 下;
156+
157+
158+
**第三步:修改 KnowStreaming 的配置**
159+
160+
- 1、修改数据库,开启ZK的认证
161+
```sql
162+
update ks_km_physical_cluster set zk_properties='{ "openSecure": true }' where id=集群1的ID;
163+
```
164+
165+
- 2、在 `KnowStreaming/bin/startup.sh` 中的47行的JAVA_OPT中追加如下设置
166+
```bash
167+
-Dsun.security.krb5.debug=true -Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/opt/zookeeper.jaas
168+
```
169+
170+
- 3、重启KS集群后再 start.out 中看到如下信息,则证明Kerberos配置成功;
171+
172+
![success_1.png](assets/support_kerberos_zk/success_1.png)
173+
174+
![success_2.png](assets/support_kerberos_zk/success_2.png)
175+
176+
177+
**第四步:补充说明**
178+
179+
- 1、多Kafka集群如果用的是一样的Kerberos域的话,只需在每个`ZK`中给`kafka`用户配置`crdwa`权限即可,这样集群初始化的时候`zkclient`是都可以认证;
180+
- 2、多个Kerberos域暂时未适配;

docs/dev_guide/支持Kerberos认证的ZK.md

Lines changed: 0 additions & 69 deletions
This file was deleted.

0 commit comments

Comments
 (0)