天天看点

【DataHub】 现代数据栈的元数据平台--如何快速验证所有组件容器都在正确的运行?

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",
]
           
【DataHub】 现代数据栈的元数据平台--如何快速验证所有组件容器都在正确的运行?

2. 使用docker 命令检查

2.1.查看容器列表

docker container ls

2.2.查看容器资源使用情况

docker container stats

【DataHub】 现代数据栈的元数据平台--如何快速验证所有组件容器都在正确的运行?

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
           
【DataHub】 现代数据栈的元数据平台--如何快速验证所有组件容器都在正确的运行?

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的内容。

【DataHub】 现代数据栈的元数据平台--如何快速验证所有组件容器都在正确的运行?

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