Doris中的本地routineload环境,用于开发回归测试用例

----------------2024-2-6-更新--------------

doris的routineload,就是从kafka中加载数据到表,特点是定时、周期性的从kafka取数据。

要想在本地开发测试routine load相关功能,需要配置kafka环境,尤其是需要增加routine load回归测试用例时,还需要kafka有回归测试需要的数据。

doris源码里自带了一个脚本 docker/thirdparties/run-thirdparties-docker.sh ,它可以在本地的docker中创建container(里面包含了kafka、zookeeper,总之就是kafka测试环境),并且加载回归测试所需要的数据。

下面就是使用这个脚本,搭建本地kafka环境的步骤:

1、首先本地机器要安装和启动docker服务器,podman也行:

systemctl start docker

或者

systemctl start podman

docker ps

脚本中要用docker-compose,这是个python脚本,要用pip下载:pip install docker-compose

2、安装Java环境:

export JAVA_HOME=/home/postgres/jdk-1.8.0_201

export PATH=JAVA_HOME/bin:PATH

3、安装kafka(客户端)

在docker之外,我们需要kafka客户端,这样可以查看docker中的kafka的topic,由于只需要客户端,只要下载安装包解压就行,不需要任何配置:

root@qinhvm postgres# ls kafka_2.13-2.7.2*

kafka_2.13-2.7.2.tgz

kafka_2.13-2.7.2:

bin config libs LICENSE licenses NOTICE site-docs

4、然后就是doris源码里的脚本 docker/thirdparties/run-thirdparties-docker.sh,在我的环境,它有点问题,需要改一下。

其实我们只用到 run-thirdparties-docker.sh

if \[ "${RUN_KAFKA}" -eq 1 ]; then

。。。

fi

这部分代码块,修改后的这部分脚本如下:

bash 复制代码
if [[ "${RUN_KAFKA}" -eq 1 ]]; then
    # kafka
    KAFKA_CONTAINER_ID="${CONTAINER_UID}kafka"
    eth0_num=$(ifconfig -a|grep flags=|grep -n ^ens3|awk -F ':' '{print $1}')
    IP_HOST=$(ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"|tail -n +${eth0_num}|head -n 1)
    cp "${ROOT}"/docker-compose/kafka/kafka.yaml.tpl "${ROOT}"/docker-compose/kafka/kafka.yaml
    sed -i "s/doris--/${CONTAINER_UID}/g" "${ROOT}"/docker-compose/kafka/kafka.yaml
    sed -i "s/localhost/${IP_HOST}/g" "${ROOT}"/docker-compose/kafka/kafka.yaml
    sudo docker-compose -f "${ROOT}"/docker-compose/kafka/kafka.yaml down
    if [[ "${STOP}" -ne 1 ]]; then
        sudo docker-compose -f "${ROOT}"/docker-compose/kafka/kafka.yaml up --build --remove-orphans -d
        sleep 10s
        # start_kafka_producers "${KAFKA_CONTAINER_ID}" "${IP_HOST}"
    fi
fi

下面的红色粗体部分根据自己机器上网卡名替换一下:

eth0_num=(ifconfig -a\|grep flags=\|grep -n \^**ens3**\|awk -F ':' '{print 1}')

**start_kafka_producers()**这个函数把测试数据写到kafka的topic里,测试数据在doris/docker/thirdparties/docker-compose/kafka/scripts/目录下,这个函数在最新的代码里被注掉了,因为routine load测试用例里,有一段代码替代了它的工作。

还要修改 doris/docker/thirdparties/custom_settings.env:

CONTAINER_UID="doris-mytest-" # 这个要改一下,随便取个名

还需要修改 doris/docker/thirdparties/docker-compose/kafka/kafka.yaml.tpl :

version: "3"

networks:

doris--kafka--network:

ipam:

driver: default

config:

  • subnet: 168.45.0.0/24

services:

doris--zookeeper:

image: wurstmeister/zookeeper

restart: always

container_name: doris--zookeeper

ports:

  • 12181:2181

networks:

  • doris--kafka--network

doris--kafka:

image: wurstmeister/kafka

restart: always

container_name: doris--kafka

depends_on:

  • doris--zookeeper

ports:

  • 19193:19193

environment:

KAFKA_ZOOKEEPER_CONNECT: doris--zookeeper:2181/kafka

KAFKA_LISTENERS: PLAINTEXT://:19193

KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:19193

KAFKA_BROKER_ID: 1

volumes:

  • /var/run/docker.sock:/var/run/docker.sock

networks:

  • doris--kafka--network

上面这些都弄好后,执行 ./run-thirdparties-docker.sh -c kafka,就会下载镜像,创建kafka和zookeeper的容器,配置好网络。

每次执行完本地的routine load测试用例,下次执行前要重复执行一下./run-thirdparties-docker.sh -c kafka 这样可以删除之前测试用例创建的topic,否则会重复插入数据导致测试失败。

但是在执行routine load测试用例时,又遇到了一个问题,就是报找不到类:

这应该是没有把kafka-client的jar加到classpath中,打开run-thirdparties-docker.sh,在文件的最后做如下修改:(kafka-client的jar报在fe中有)

然后就OK了。

相关推荐
倔强的石头_3 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
冬奇Lab4 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
ClouGence4 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle
无响应de神4 天前
三、用户与权限管理
数据库·mysql
麦聪聊数据5 天前
数据服务化时代:企业数据能力输出的核心路径
数据库
shushangyun_5 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
DARLING Zero two♡5 天前
【MySQL数据库】数据类型与表约束
数据库·mysql
曹牧5 天前
Oracle EXPLAIN PLAN
数据库·oracle
BD_Marathon5 天前
SQL学习指南——视图
数据库·sql
活宝小娜5 天前
mysql详细安装教程
数据库·mysql·adb