#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Overall configuration of inlong service components
# source sink (Required)
###############################################################################
# Selection of message queue source: tubemq or pulsar
source_type=tubemq
# Selection of sort sink: hive or clickhouse
sink_type=hive
###############################################################################

# agent
###############################################################################
# http default port,ip,port
agent_http_enable=true
agent_local_ip=127.0.0.1
###############################################################################

# mysql(Required)
###############################################################################
# MySQL service, IP, port, user and password
spring_datasource_hostname=MYSQL_HOSTNAME
spring_datasource_port=MYSQL_PORT
spring_datasource_username=MYSQL_USERNAME
spring_datasource_password=MYSQL_PASSWORD
###############################################################################

# zookeeper
###############################################################################
# zookeeper address
zkServerAddr=127.0.0.1:2181
###############################################################################

# tubemq (Optional)
###############################################################################
# master
# host address of master, required; must be configured at network card, enabled
tubemqMaster_hostName=YOU_LOCAL_IP
# port that master listens to, optional; default is 8715
# tubemqMaster_port=8715
# port that master web console listens to
# tubemqMaster_webPort=8080
# metaDataPath
metaDataPath=/stage/meta_data
# This token is used for page configuration, API call, etc
# confModAuthToken=abc

# broker
# unique id of broker server, required; when set to 0, TubeMQ will retrieve
# IP, convert to int and set as brokerID
# brokerId=0
# hostname of broker server, required
tubemqBroker_hostName=YOU_LOCAL_IP
# port that broker server listens to, optional; default is 8123
# tubemqBroker_port=8123
# port that broker web console listens to
# tubemqBroker_webPort=8081
# path to message files
primaryPath=/stage/msg_data

# manager(Required)
# the parameters for init cluster
TUBE_MANAGER_IP=YOU_LOCAL_IP
TUBE_MANAGER_PORT=8089
###############################################################################

# pulsar (Optional)
###############################################################################
# Service address of pulsar (Required)
pulsar_adminUrl=http://127.0.0.1:8090
# Pulsar broker address（Required）
pulsar_serviceUrl=pulsar://127.0.0.1:6650
# Default tenant of Pulsar
# pulsar_defaultTenant=public
###############################################################################

# inlong manager
###############################################################################
# manager-web (Required)
manager_server_hostname=127.0.0.1
manager_server_port=8083
# The default configuration file is dev
# spring_profiles_active=dev
# cluster_zk_root=inlong_hive
# app_name-InLong Sort is cluster-id
# sort_appName=inlong_app
###############################################################################

# inlong website(Required)
###############################################################################
# port
inlong_web_port=80
# docker port
docker_inlong_web_port=80
###############################################################################

# local_ip(Required)
###############################################################################
local_ip=YOU_LOCAL_IP
###############################################################################