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 com.linkedin.metadata.entity.ebean.EbeanAspectV2@dd26e011
这与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使用
- 查看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