databub中的元件較多,并且都在docker 容器中運作,那麼如何快速驗證所有元件容器都在正确的運作呢?
本文提供如下3類檢查方式
- 使用datahub内置工具檢查
- 使用docker 指令檢查
- 檢查元件資料初始化是否正常?
最後針對檢查出的常見問題,提供解決方案。
1. 使用datahub内置工具檢查
如果安裝了datahub CLI工具,可以使用内置的檢查工具:
datahub docker check
此工具檢查步驟如下:
- 檢查記憶體總量【“MemTotal”】是否大于3.8GB
- 檢查必須的9個容器是否存在(詳見
清單)REQUIRED_CONTAINERS
- 檢查3個setup容器是否成功運作并退出 (詳見
清單)ENSURE_EXIT_SUCCESS
- 檢查必須的9個容器的運作狀态【正常是running】和健康狀态【正常是healthy】
- 如果檢查不符合預期,将檢查結果追加到issues清單
- 如果issues清單為空,則顯示✔ No issues detected,否則列印不符合預期的清單
REQUIRED_CONTAINERS = [
"elasticsearch-setup",
"elasticsearch",
"datahub-gms",
"datahub-frontend-react",
"kafka-setup",
"schema-registry",
"broker",
"mysql",
"zookeeper",
]
ENSURE_EXIT_SUCCESS = [
"kafka-setup",
"elasticsearch-setup",
"mysql-setup",
]

2. 使用docker 指令檢查
2.1.檢視容器清單
docker container ls
2.2.檢視容器資源使用情況
docker container stats
2.3.檢視docker 日志
檢視最新的10行日志,看日志是否有報錯資訊
docker logs -n 100 datahub-frontend-react
docker logs -n 100 datahub-gms
3. 檢查元件資料初始化是否正常?
3.1. 檢查MXE Kafka topics是否建立?
3.1.1.使用kafka内置指令檢視
# 進入容器内容
docker exec -it broker /bin/bash
# 檢視topic 清單
kafka-topics --bootstrap-server broker:29092 --list
# 檢視消費組清單
kafka-consumer-groups --bootstrap-server broker:29092 --list
# 檢視所有消費組的消費情況
kafka-consumer-groups --bootstrap-server broker:29092 --describe --all-groups
# 檢視具體一個消費組的消費情況
kafka-consumer-groups --bootstrap-server broker:29092 --describe --group datahub-usage-event-consumer-job-client
# 檢視消費組的成員情況
kafka-consumer-groups --bootstrap-server broker:29092 --describe --all-groups --members
kafka-consumer-groups --bootstrap-server broker:29092 --describe --group datahub-usage-event-consumer-job-client --members
3.1.2.使用kcat指令檢視
alias kcat='docker run -it --network=host edenhill/kcat:1.7.1 -b localhost:9092'
kcat -L
确認MetadataChangeEvent、MetadataAuditEvent、MetadataChangeProposal_v1和MetadataChangeLog_v1 這些topic存在
注意:
_schemas
是元件schema-registry使用的
Metadata for all topics (from broker 1: localhost:9092/1):
1 brokers:
broker 1 at localhost:9092 (controller)
11 topics:
topic "MetadataChangeLog_Timeseries_v1" with 1 partitions:
partition 0, leader 1, replicas: 1, isrs: 1
topic "MetadataAuditEvent_v4" with 1 partitions:
partition 0, leader 1, replicas: 1, isrs: 1
topic "MetadataChangeEvent_v4" with 1 partitions:
partition 0, leader 1, replicas: 1, isrs: 1
topic "_schemas" with 1 partitions:
partition 0, leader 1, replicas: 1, isrs: 1
topic "MetadataChangeProposal_v1" with 1 partitions:
partition 0, leader 1, replicas: 1, isrs: 1
topic "FailedMetadataChangeEvent_v4" with 1 partitions:
partition 0, leader 1, replicas: 1, isrs: 1
topic "FailedMetadataChangeProposal_v1" with 1 partitions:
partition 0, leader 1, replicas: 1, isrs: 1
topic "MetadataChangeLog_Versioned_v1" with 1 partitions:
partition 0, leader 1, replicas: 1, isrs: 1
topic "DataHubUsageEvent_v1" with 1 partitions:
partition 0, leader 1, replicas: 1, isrs: 1
topic "__confluent.support.metrics" with 1 partitions:
partition 0, leader 1, replicas: 1, isrs: 1
3.2. 檢查Elasticsearch的搜尋索引是否建立?
ES索引生命周期的定義,詳見參見ilm-index-lifecycle
# 檢視叢集資訊
http://172.25.21.22:9200/_cat/health?v
# 檢視節點情況
http://172.25.21.22:9200/_cat/nodes?v
# 檢視索引資訊
http://172.25.21.22:9200/_cat/indices?bytes=b&s=store.size:desc&v
http://172.25.21.22:9200/_cat/indices?v
# 檢視生命周期政策
http://172.25.21.22:9200/_ilm/policy?pretty
# 檢視索引模闆
http://172.25.21.22:9200/_index_template?pretty
确認存在datasetindex_v2和corpuserindex_v2索引
cat指令的使用詳見:elasticsearch 7.9 cat
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open datajobindex_v2 sWbMCfazSX6OgBK3WvSOeg 1 1 2 9 16.2kb 16.2kb
yellow open dataset_datasetprofileaspect_v1 ZxhiYfytQZamggIepIMpgQ 1 1 2 0 5kb 5kb
yellow open dataflowindex_v2 zTrSO6IYTDOq2TwU9snX3Q 1 1 1 3 14.4kb 14.4kb
yellow open mlmodelgroupindex_v2 XW-7TRgMQmq0-khgiptAqg 1 1 0 0 208b 208b
yellow open mlmodelindex_v2 oISkmpIHTIWbOgHdBrmSwQ 1 1 1 4 14.5kb 14.5kb
yellow open datahubpolicyindex_v2 72bKZt6GSs-OKqDkwnOGcw 1 1 0 0 208b 208b
yellow open corpuserindex_v2 vXBLDUG4Q1mPw3KD_tzeBQ 1 1 2 0 7.2kb 7.2kb
yellow open dataprocessindex_v2 8m42drTgTdSz7roEyIk9Aw 1 1 0 0 208b 208b
yellow open chartindex_v2 _S8TajdHQkKo4WabK9UdcQ 1 1 2 6 11.9kb 11.9kb
yellow open tagindex_v2 3ZDB11c5TfGr2lukKUMSQw 1 1 2 1 7.4kb 7.4kb
yellow open mlmodeldeploymentindex_v2 _s2FMAG8TbSoJefnRKzT9A 1 1 0 0 208b 208b
yellow open datajob_datahubingestioncheckpointaspect_v1 6KeX8-eWSeGwwriBKIXoXw 1 1 0 0 208b 208b
yellow open dashboardindex_v2 kiy095WLSCuVZvlYrrFt9w 1 1 1 3 12.1kb 12.1kb
yellow open .ds-datahub_usage_event-000001 8xdgcXa6RuiNMawv66hpwQ 1 1 760 0 360.6kb 360.6kb
yellow open datasetindex_v2 9tB6_Vo9T6e_GoXUjdGF0Q 1 1 15 3 45.9kb 45.9kb
yellow open .ds-datahub_usage_event-000002 GTnjGvnJRBKGgmt4cz37dQ 1 1 0 0 208b 208b
yellow open mlfeatureindex_v2 g807UdvfQSq_gFuVgKKfIw 1 1 20 19 23.2kb 23.2kb
yellow open datajob_datahubingestionrunsummaryaspect_v1 JSXa6cIrQniVLfHlPPO8ug 1 1 0 0 208b 208b
yellow open dataplatformindex_v2 7MEHkVpVRbuy8jCjreJYlA 1 1 0 0 208b 208b
yellow open glossarynodeindex_v2 tv04G0-qTH-uZJzYZS5SqA 1 1 1 1 9.5kb 9.5kb
yellow open datahubretentionindex_v2 a7P-OLDET8yXJYjSLtDioQ 1 1 0 0 208b 208b
yellow open graph_service_v1 9e4UyQIBQOWbCc8gnUCnlA 1 1 118 0 33kb 33kb
yellow open system_metadata_service_v1 j4HBXC64T3-drbfDcnjcXQ 1 1 353 5 65.5kb 65.5kb
yellow open dataset_operationaspect_v1 JeyNL03bSbapiRTnW_BVlA 1 1 0 0 208b 208b
yellow open schemafieldindex_v2 mDoCdT78TUm_ytOGBRstTg 1 1 0 0 208b 208b
yellow open mlfeaturetableindex_v2 5PDKM36rQFeCp9wFP08Qkw 1 1 5 14 11.8kb 11.8kb
yellow open glossarytermindex_v2 Pn4S_NWYR2G_d0ptgwXslA 1 1 3 8 13.5kb 13.5kb
yellow open mlprimarykeyindex_v2 Hab0cMlVQBu5UrkxFK0hpQ 1 1 7 0 9.5kb 9.5kb
yellow open corpgroupindex_v2 9P1iPOOBTUSoVnXsvM9xXA 1 1 3 2 13.8kb 13.8kb
yellow open dataset_datasetusagestatisticsaspect_v1 DcCcNpRkQTCupcRm5uAeog 1 1 4 0 8.9kb 8.9kb
3.3. 檢查資料是否正确寫入MySQL?
docker exec -it mysql /usr/bin/mysql datahub --user=datahub --password=datahub
select * from metadata_aspect_v2 limit 10;
檢查metadata_aspect_v2表的内容,這個表存儲所有實體對象aspect的内容。
4.檢查出的問題如何解決
4.1.docker資源不夠産生的問題
問題現象:elasticsearch 或 kafka broker 容器因錯誤退出 或 長時間卡住。
在容器日志中看到如下錯誤,很可能的原因是:給docker提供的資源不夠。請確定至少配置設定8GB RAM + 2GB交換空間。
datahub-gms | 2022/01/03 14:34:26 Problem with request: Get http://elasticsearch:9200: dial tcp 172.19.0.5:9200: connect: connection refused. Sleeping 1s
broker | [2022-01-03 14:34:42,398] INFO Client session timed out, have not heard from server in 6874ms for sessionid 0x10000023fa60002, closing socket connection and attempting reconnect (org.apache.zookeeper.ClientCnxn)
schema-registry | [2022-01-03 14:34:48,518] WARN Client session timed out, have not heard from server in 20459ms for sessionid 0x10000023fa60007 (org.apache.zookeeper.ClientCnxn)
4.2. bind: address already in use
網絡端口被占用(被其它程序或失敗的容器),在啟動容器前,請檢查使用的端口是否被占用,如果被占用,需要kill掉占用端口的程序
lsof -i :3306
kill -15 <PID found in step1>
4.3. 登入時報datahub.metadata_aspect表不存在
這表示mysql docker容器啟動時,資料庫沒有正确的初始化。需要運作下面的指令手工初始化:
docker exec -i mysql sh -c 'exec mysql datahub -udatahub -pdatahub' < docker/mysql/init.sql
4.4. 搞砸了datahub的環境,如何重新開始?
運作以下腳本 會删除建立的所有容器和卷。注意:會删除所有資料(包括 zk,elasticsearch,mysql中的資料)
datahub docker nuke
此指令執行的操作如下:
- 将所有container删除
- 如果不資料資料,将所有volume上的資料删除
- 将所有network删除
4.5. java.lang.IllegalStateException: Duplicate key 主鍵沖突
在DataHub GMS container 的日志中報如下錯誤:
Caused by: java.lang.IllegalStateException: Duplicate key [email protected]
這與SQL列排序【column collation】問題有關。DataHub在2021年10月26日之前,URN字段預設排序規則使用的是不區分大小寫的utf8mb4_unicode_ci。目前預設排序規則使用區分大小的utf8mb4_bin)。
可以使用如下指令修改預設排序規則:
ALTER TABLE metadata_aspect_v2 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
附錄
如何使用kcat?
kcat安裝
注意: 建立指令别名中的localhost:9092,根據需要調整為實際的kafka broker位址,如果配置多個,以
,
分隔
# 拉取鏡像
docker pull edenhill/kcat:1.7.1
# 建立指令别名
alias kcat='docker run -it --network=host edenhill/kcat:1.7.1 -b localhost:9092'
# 檢視幫助
kcat -h
kcat使用
詳見參見kcat running-in-docker
- 檢視topic 清單資訊
kcat -L
- 消費某一個topic的消息,如從topic MetadataChangeProposal_v1 中讀取最新的2000條消息後退出的指令:
kcat -C -t MetadataChangeProposal_v1 -p 0 -o -2000 -e
- 消費某一個topic的消息,并按指定格式輸出:
kcat -C -t MetadataChangeLog_Timeseries_v1 -f 'Topic %t[%p], offset: %o, key: %k, payload: %S bytes: %s\n'
- 消費某一個topic的消息,以jons方式輸出:
kcat -C -t MetadataChangeLog_Timeseries_v1 -J
參考
how-can-i-confirm-if-all-docker-containers-are-running-as-expected-after-a-quickstart