Merge remote-tracking branch 'origin/jobName-fixed' into jobName-fixed
diff --git a/.gitignore b/.gitignore
index 8d1c07a..918c3a2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,7 +7,6 @@
 out/
 target/
 *.log*
-bin/
 tmp/
 *.iml
 *.tmp
diff --git a/quickstart-flink/quickstart-connector/assembly/bin/setclasspath.sh b/quickstart-flink/quickstart-connector/assembly/bin/setclasspath.sh
new file mode 100644
index 0000000..1cd3a54
--- /dev/null
+++ b/quickstart-flink/quickstart-connector/assembly/bin/setclasspath.sh
@@ -0,0 +1,98 @@
+#!/bin/bash
+#
+# 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.
+#
+# -----------------------------------------------------------------------------
+#  Set JAVA_HOME or JRE_HOME if not already set, ensure any provided settings
+#  are valid and consistent with the selected start-up options and set up the
+#  endorsed directory.
+# -----------------------------------------------------------------------------
+
+# Make sure prerequisite environment variables are set
+if [[ -z "$JAVA_HOME" && -z "$JRE_HOME" ]]; then
+  # shellcheck disable=SC2154
+  if ${darwin}; then
+    # Bugzilla 54390
+    if [[ -x '/usr/libexec/java_home' ]]; then
+      # shellcheck disable=SC2006
+      # shellcheck disable=SC2155
+      export JAVA_HOME=$(/usr/libexec/java_home)
+    # Bugzilla 37284 (reviewed).
+    elif [[ -d "/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home" ]]; then
+      export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home"
+    fi
+  else
+    # shellcheck disable=SC2006
+    # shellcheck disable=SC2230
+    JAVA_PATH=$(which java 2>/dev/null)
+    if [[ "x$JAVA_PATH" != "x" ]]; then
+      # shellcheck disable=SC2006
+      JAVA_PATH=$(dirname "${JAVA_PATH}" 2>/dev/null)
+      # shellcheck disable=SC2006
+      JRE_HOME=$(dirname "${JAVA_PATH}" 2>/dev/null)
+    fi
+    if [[ "x$JRE_HOME" == "x" ]]; then
+      # XXX: Should we try other locations?
+      if [[ -x /usr/bin/java ]]; then
+        JRE_HOME=/usr
+      fi
+    fi
+  fi
+  if [[ -z "$JAVA_HOME" && -z "$JRE_HOME" ]]; then
+    echo "Neither the JAVA_HOME nor the JRE_HOME environment variable is defined"
+    echo "At least one of these environment variable is needed to run this program"
+    exit 1
+  fi
+fi
+if [[ -z "$JAVA_HOME" && "$1" == "debug" ]]; then
+  echo "JAVA_HOME should point to a JDK in order to run in debug mode."
+  exit 1
+fi
+if [[ -z "$JRE_HOME" ]]; then
+  JRE_HOME="$JAVA_HOME"
+fi
+
+# If we're running under jdb, we need a full jdk.
+if [[ "$1" == "debug" ]]; then
+  # shellcheck disable=SC2154
+  if [[ "$os400" == "true" ]]; then
+    if [[ ! -x "$JAVA_HOME"/bin/java || ! -x "$JAVA_HOME"/bin/javac ]]; then
+      echo "The JAVA_HOME environment variable is not defined correctly"
+      echo "This environment variable is needed to run this program"
+      echo "NB: JAVA_HOME should point to a JDK not a JRE"
+      exit 1
+    fi
+  else
+    if [[ ! -x "$JAVA_HOME"/bin/java || ! -x "$JAVA_HOME"/bin/jdb || ! -x "$JAVA_HOME"/bin/javac ]]; then
+      echo "The JAVA_HOME environment variable is not defined correctly"
+      echo "This environment variable is needed to run this program"
+      echo "NB: JAVA_HOME should point to a JDK not a JRE"
+      exit 1
+    fi
+  fi
+fi
+
+# Set standard commands for invoking Java, if not already set.
+# shellcheck disable=SC2153
+if [[ -z "$_RUNJAVA" ]]; then
+  # shellcheck disable=SC2034
+  RUNJAVA="$JRE_HOME"/bin/java
+fi
+if [[ "$os400" != "true" ]]; then
+  if [[ -z "$_RUNJDB" ]]; then
+    _RUNJDB="$JAVA_HOME"/bin/jdb
+  fi
+fi
diff --git a/quickstart-flink/quickstart-connector/assembly/bin/shutdown.sh b/quickstart-flink/quickstart-connector/assembly/bin/shutdown.sh
new file mode 100644
index 0000000..b769953
--- /dev/null
+++ b/quickstart-flink/quickstart-connector/assembly/bin/shutdown.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+#
+# 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.
+#
+# -----------------------------------------------------------------------------
+#Stop Script for the streampark-quickstart
+# -----------------------------------------------------------------------------
+#
+# Better OS/400 detection: see Bugzilla 31132
+os400=false
+# shellcheck disable=SC2006
+case "$(uname)" in
+OS400*) os400=true ;;
+esac
+
+# resolve links - $0 may be a softlink
+PRG="$0"
+
+while [[ -L "$PRG" ]]; do
+  # shellcheck disable=SC2006
+  ls=$(ls -ld "$PRG")
+  # shellcheck disable=SC2006
+  link=$(expr "$ls" : '.*-> \(.*\)$')
+  if expr "$link" : '/.*' >/dev/null; then
+    PRG="$link"
+  else
+    # shellcheck disable=SC2006
+    PRG=$(dirname "$PRG")/"$link"
+  fi
+done
+
+# shellcheck disable=SC2006
+PRGDIR=$(dirname "$PRG")
+EXECUTABLE=flink.sh
+
+# Check that target executable exists
+if ${os400}; then
+  # -x will Only work on the os400 if the files are:
+  # 1. owned by the user
+  # 2. owned by the PRIMARY group of the user
+  # this will not work if the user belongs in secondary groups
+  eval
+else
+  if [[ ! -x "$PRGDIR"/"$EXECUTABLE" ]]; then
+    echo "Cannot find $PRGDIR/$EXECUTABLE"
+    echo "The file is absent or does not have execute permission"
+    echo "This file is needed to run this program"
+    exit 1
+  fi
+fi
+
+exec "$PRGDIR"/"$EXECUTABLE" stop "$@"
diff --git a/quickstart-flink/quickstart-connector/assembly/bin/startup.sh b/quickstart-flink/quickstart-connector/assembly/bin/startup.sh
new file mode 100644
index 0000000..8d5cc2e
--- /dev/null
+++ b/quickstart-flink/quickstart-connector/assembly/bin/startup.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+#
+# 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.
+#
+# -----------------------------------------------------------------------------
+#Start Script for the streampark-quickstart
+# -----------------------------------------------------------------------------
+#
+# Better OS/400 detection: see Bugzilla 31132
+os400=false
+# shellcheck disable=SC2006
+case "$(uname)" in
+OS400*) os400=true ;;
+esac
+
+# resolve links - $0 may be a softlink
+PRG="$0"
+
+while [[ -L "$PRG" ]]; do
+  # shellcheck disable=SC2006
+  ls=$(ls -ld "$PRG")
+  # shellcheck disable=SC2006
+  link=$(expr "$ls" : '.*-> \(.*\)$')
+  if expr "$link" : '/.*' >/dev/null; then
+    PRG="$link"
+  else
+    # shellcheck disable=SC2006
+    PRG=$(dirname "$PRG")/"$link"
+  fi
+done
+
+# shellcheck disable=SC2006
+PRGDIR=$(dirname "$PRG")
+EXECUTABLE=streampark.sh
+
+# Check that target executable exists
+if ${os400}; then
+  # -x will Only work on the os400 if the files are:
+  # 1. owned by the user
+  # 2. owned by the PRIMARY group of the user
+  # this will not work if the user belongs in secondary groups
+  eval
+else
+  if [[ ! -x "$PRGDIR"/"$EXECUTABLE" ]]; then
+    echo "Cannot find $PRGDIR/$EXECUTABLE"
+    echo "The file is absent or does not have execute permission"
+    echo "This file is needed to run this program"
+    exit 1
+  fi
+fi
+
+exec "$PRGDIR"/"$EXECUTABLE" start "$@"
diff --git a/quickstart-flink/quickstart-connector/assembly/bin/streampark.sh b/quickstart-flink/quickstart-connector/assembly/bin/streampark.sh
new file mode 100644
index 0000000..5eee8a5
--- /dev/null
+++ b/quickstart-flink/quickstart-connector/assembly/bin/streampark.sh
@@ -0,0 +1,272 @@
+#!/bin/bash
+#
+# 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.
+#
+# -----------------------------------------------------------------------------
+#Start Script for the streampark-quickstart
+# -----------------------------------------------------------------------------
+#
+# Better OS/400 detection: see Bugzilla 31132
+
+#echo color
+WHITE_COLOR="\E[1;37m"
+RED_COLOR="\E[1;31m"
+BLUE_COLOR='\E[1;34m'
+GREEN_COLOR="\E[1;32m"
+YELLOW_COLOR="\E[1;33m"
+RES="\E[0m"
+
+echo_r() {
+  # Color red: Error, Failed
+  [[ $# -ne 1 ]] && return 1
+  # shellcheck disable=SC2059
+  printf "[${BLUE_COLOR}Flink${RES}] ${RED_COLOR}$1${RES}\n"
+}
+
+echo_g() {
+  # Color green: Success
+  [[ $# -ne 1 ]] && return 1
+  # shellcheck disable=SC2059
+  printf "[${BLUE_COLOR}Flink${RES}] ${GREEN_COLOR}$1${RES}\n"
+}
+
+echo_y() {
+  # Color yellow: Warning
+  [[ $# -ne 1 ]] && return 1
+  # shellcheck disable=SC2059
+  printf "[${BLUE_COLOR}Flink${RES}] ${YELLOW_COLOR}$1${RES}\n"
+}
+
+echo_w() {
+  # Color yellow: White
+  [[ $# -ne 1 ]] && return 1
+  # shellcheck disable=SC2059
+  printf "[${BLUE_COLOR}Flink${RES}] ${WHITE_COLOR}$1${RES}\n"
+}
+
+# OS specific support.  $var _must_ be set to either true or false.
+cygwin=false
+darwin=false
+os400=false
+hpux=false
+# shellcheck disable=SC2006
+case "$(uname)" in
+CYGWIN*) cygwin=true ;;
+Darwin*) darwin=true ;;
+OS400*) os400=true ;;
+HP-UX*) hpux=true ;;
+esac
+
+# resolve links - $0 may be a softlink
+PRG="$0"
+
+while [[ -L "$PRG" ]]; do
+  # shellcheck disable=SC2006
+  ls=$(ls -ld "$PRG")
+  # shellcheck disable=SC2006
+  link=$(expr "$ls" : '.*-> \(.*\)$')
+  if expr "$link" : '/.*' >/dev/null; then
+    PRG="$link"
+  else
+    # shellcheck disable=SC2006
+    PRG=$(dirname "$PRG")/"$link"
+  fi
+done
+
+# Get standard environment variables
+# shellcheck disable=SC2006
+PRGDIR=$(dirname "$PRG")
+
+# shellcheck disable=SC2124
+# shellcheck disable=SC2034
+RUN_ARGS="$@"
+#global variables....
+# shellcheck disable=SC2006
+# shellcheck disable=SC2164
+APP_HOME=$(
+  cd "$PRGDIR/.." >/dev/null
+  pwd
+)
+APP_BASE="$APP_HOME"
+APP_CONF="$APP_BASE"/conf
+APP_LOG="$APP_BASE"/logs
+APP_LIB="$APP_BASE"/lib
+# shellcheck disable=SC2034
+APP_BIN="$APP_BASE"/bin
+APP_TEMP="$APP_BASE"/temp
+[[ ! -d "$APP_LOG" ]] && mkdir "${APP_LOG}" >/dev/null
+[[ ! -d "$APP_TEMP" ]] && mkdir "${APP_TEMP}" >/dev/null
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if ${cygwin}; then
+  # shellcheck disable=SC2006
+  [[ -n "$APP_HOME" ]] && APP_HOME=$(cygpath --unix "$APP_HOME")
+  # shellcheck disable=SC2006
+  [[ -n "$APP_BASE" ]] && APP_BASE=$(cygpath --unix "$APP_BASE")
+fi
+
+# Ensure that neither APP_HOME nor APP_BASE contains a colon
+# as this is used as the separator in the classpath and Java provides no
+# mechanism for escaping if the same character appears in the path.
+case ${APP_HOME} in
+*:*)
+  echo "Using APP_HOME:   $APP_HOME"
+  echo "Unable to start as APP_HOME contains a colon (:) character"
+  exit 1
+  ;;
+esac
+case ${APP_BASE} in
+*:*)
+  echo "Using APP_BASE:   $APP_BASE"
+  echo "Unable to start as APP_BASE contains a colon (:) character"
+  exit 1
+  ;;
+esac
+
+# For OS400
+if ${os400}; then
+  # Set job priority to standard for interactive (interactive - 6) by using
+  # the interactive priority - 6, the helper threads that respond to requests
+  # will be running at the same priority as interactive jobs.
+  COMMAND='chgjob job('${JOBNAME}') runpty(6)'
+  system "${COMMAND}"
+  # Enable multi threading
+  export QIBM_MULTI_THREADED=Y
+fi
+
+# (0) export HADOOP_CLASSPATH
+# shellcheck disable=SC2006
+if [ x"$(hadoop classpath)" == x"" ]; then
+  echo_r " Please make sure to export the HADOOP_CLASSPATH environment variable or have hadoop in your classpath"
+else
+  # shellcheck disable=SC2155
+  export HADOOP_CLASSPATH=$(hadoop classpath)
+fi
+
+doStart() {
+  local yaml=""
+  if [[ $# -eq 0 ]]; then
+    yaml="application.yml"
+    echo_w "not input properties-file,use default application.yml"
+  else
+    #Solve the path problem, arbitrary path, ignore prefix, only take the content after conf/
+    if [ "$1" == "--conf" ]; then
+      shift
+      # shellcheck disable=SC2034
+      yaml=$(echo "$1" | awk -F 'conf/' '{print $2}')
+      shift
+    fi
+  fi
+
+  local app_proper=""
+  if [[ -f "$APP_CONF/$yaml" ]]; then
+    app_proper="$APP_CONF/$yaml"
+  fi
+
+  # flink main jar...
+  # shellcheck disable=SC2155
+  local jarfile="${APP_LIB}/$(basename "${APP_BASE}").jar"
+
+  local param_cli="org.apache.streampark.flink.core.conf.ParameterCli"
+
+  # shellcheck disable=SC2006
+  # shellcheck disable=SC2155
+  local app_name="$(java -cp "${jarfile}" $param_cli --name "${app_proper}")"
+
+  # shellcheck disable=SC2001
+  local safe_app_name="$(echo "$app_name" | sed "s/ /_/g")"
+
+  local trim="s/^[ \s]\{1,\}//g;s/[ \s]\{1,\}$//g"
+  # shellcheck disable=SC2006
+  # shellcheck disable=SC2155
+  local detached_mode="$(java -cp "${jarfile}" $param_cli --detached "$app_proper")"
+  # shellcheck disable=SC2006
+  # trim...
+  detached_mode="$(echo "$detached_mode" | sed "$trim")"
+  # shellcheck disable=SC2006
+  # shellcheck disable=SC2155
+  local option="$(java -cp "${jarfile}" $param_cli --option "$app_proper") $*"
+  # shellcheck disable=SC2006
+  option="$(echo "$option" | sed "$trim")"
+
+  # shellcheck disable=SC2006
+  # shellcheck disable=SC2155
+  local property_params="$(java -cp "${jarfile}" $param_cli --property "$app_proper")"
+  # shellcheck disable=SC2006
+  property_params="$(echo "$property_params" | sed "$trim")"
+
+  echo_g "${app_name} Starting by:<${detached_mode}> mode"
+
+  # json all params...
+  local runOption="$option"
+  if [ x"$property_params" != x"" ]; then
+    runOption="$runOption $property_params"
+  fi
+
+  local argsOption=""
+  if [ x"$app_proper" != x"" ]; then
+    argsOption="--conf $app_proper"
+  fi
+
+  if [ x"$detached_mode" == x"Detached" ]; then
+    flink run \
+    $runOption \
+    $jarfile \
+    $argsOption
+    echo "${safe_app_name}" >"${APP_TEMP}/.running"
+  else
+    # shellcheck disable=SC2006
+    # shellcheck disable=SC2155
+    local app_log_date=$(date "+%Y%m%d_%H%M%S")
+    local app_out="${APP_LOG}/${safe_app_name}-${app_log_date}.log"
+    flink run \
+    $runOption \
+    $jarfile \
+    $argsOption >> "$app_out" 2>&1 &
+    echo "${safe_app_name}" >"${APP_TEMP}/.running"
+    echo_g "${safe_app_name} starting,more detail please log:$app_out"
+  fi
+}
+
+doStop() {
+  # shellcheck disable=SC2155
+  # shellcheck disable=SC2034
+  local running_app=$(cat "${APP_TEMP/.running/}")
+  if [ x"${running_app}" != x"" ]; then
+    echo_w "can not found flink job!"
+  fi
+  flink list -r | grep "${running_app}" | awk '{print $4}' | xargs flink cancel
+}
+
+case "$1" in
+start)
+  shift
+  doStart "$@"
+  exit $?
+  ;;
+stop)
+  doStop
+  exit $?
+  ;;
+*)
+  echo_g "Unknown command: $1"
+  echo_g "commands:"
+  echo_g "  start             Start"
+  echo_g "  stop              Stop"
+  echo_g "                    are you running?"
+  exit 1
+  ;;
+esac
diff --git a/quickstart-flink/quickstart-datastream/datastream_1.15/assembly/bin/setclasspath.sh b/quickstart-flink/quickstart-datastream/datastream_1.15/assembly/bin/setclasspath.sh
new file mode 100644
index 0000000..1cd3a54
--- /dev/null
+++ b/quickstart-flink/quickstart-datastream/datastream_1.15/assembly/bin/setclasspath.sh
@@ -0,0 +1,98 @@
+#!/bin/bash
+#
+# 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.
+#
+# -----------------------------------------------------------------------------
+#  Set JAVA_HOME or JRE_HOME if not already set, ensure any provided settings
+#  are valid and consistent with the selected start-up options and set up the
+#  endorsed directory.
+# -----------------------------------------------------------------------------
+
+# Make sure prerequisite environment variables are set
+if [[ -z "$JAVA_HOME" && -z "$JRE_HOME" ]]; then
+  # shellcheck disable=SC2154
+  if ${darwin}; then
+    # Bugzilla 54390
+    if [[ -x '/usr/libexec/java_home' ]]; then
+      # shellcheck disable=SC2006
+      # shellcheck disable=SC2155
+      export JAVA_HOME=$(/usr/libexec/java_home)
+    # Bugzilla 37284 (reviewed).
+    elif [[ -d "/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home" ]]; then
+      export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home"
+    fi
+  else
+    # shellcheck disable=SC2006
+    # shellcheck disable=SC2230
+    JAVA_PATH=$(which java 2>/dev/null)
+    if [[ "x$JAVA_PATH" != "x" ]]; then
+      # shellcheck disable=SC2006
+      JAVA_PATH=$(dirname "${JAVA_PATH}" 2>/dev/null)
+      # shellcheck disable=SC2006
+      JRE_HOME=$(dirname "${JAVA_PATH}" 2>/dev/null)
+    fi
+    if [[ "x$JRE_HOME" == "x" ]]; then
+      # XXX: Should we try other locations?
+      if [[ -x /usr/bin/java ]]; then
+        JRE_HOME=/usr
+      fi
+    fi
+  fi
+  if [[ -z "$JAVA_HOME" && -z "$JRE_HOME" ]]; then
+    echo "Neither the JAVA_HOME nor the JRE_HOME environment variable is defined"
+    echo "At least one of these environment variable is needed to run this program"
+    exit 1
+  fi
+fi
+if [[ -z "$JAVA_HOME" && "$1" == "debug" ]]; then
+  echo "JAVA_HOME should point to a JDK in order to run in debug mode."
+  exit 1
+fi
+if [[ -z "$JRE_HOME" ]]; then
+  JRE_HOME="$JAVA_HOME"
+fi
+
+# If we're running under jdb, we need a full jdk.
+if [[ "$1" == "debug" ]]; then
+  # shellcheck disable=SC2154
+  if [[ "$os400" == "true" ]]; then
+    if [[ ! -x "$JAVA_HOME"/bin/java || ! -x "$JAVA_HOME"/bin/javac ]]; then
+      echo "The JAVA_HOME environment variable is not defined correctly"
+      echo "This environment variable is needed to run this program"
+      echo "NB: JAVA_HOME should point to a JDK not a JRE"
+      exit 1
+    fi
+  else
+    if [[ ! -x "$JAVA_HOME"/bin/java || ! -x "$JAVA_HOME"/bin/jdb || ! -x "$JAVA_HOME"/bin/javac ]]; then
+      echo "The JAVA_HOME environment variable is not defined correctly"
+      echo "This environment variable is needed to run this program"
+      echo "NB: JAVA_HOME should point to a JDK not a JRE"
+      exit 1
+    fi
+  fi
+fi
+
+# Set standard commands for invoking Java, if not already set.
+# shellcheck disable=SC2153
+if [[ -z "$_RUNJAVA" ]]; then
+  # shellcheck disable=SC2034
+  RUNJAVA="$JRE_HOME"/bin/java
+fi
+if [[ "$os400" != "true" ]]; then
+  if [[ -z "$_RUNJDB" ]]; then
+    _RUNJDB="$JAVA_HOME"/bin/jdb
+  fi
+fi
diff --git a/quickstart-flink/quickstart-datastream/datastream_1.15/assembly/bin/shutdown.sh b/quickstart-flink/quickstart-datastream/datastream_1.15/assembly/bin/shutdown.sh
new file mode 100644
index 0000000..b769953
--- /dev/null
+++ b/quickstart-flink/quickstart-datastream/datastream_1.15/assembly/bin/shutdown.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+#
+# 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.
+#
+# -----------------------------------------------------------------------------
+#Stop Script for the streampark-quickstart
+# -----------------------------------------------------------------------------
+#
+# Better OS/400 detection: see Bugzilla 31132
+os400=false
+# shellcheck disable=SC2006
+case "$(uname)" in
+OS400*) os400=true ;;
+esac
+
+# resolve links - $0 may be a softlink
+PRG="$0"
+
+while [[ -L "$PRG" ]]; do
+  # shellcheck disable=SC2006
+  ls=$(ls -ld "$PRG")
+  # shellcheck disable=SC2006
+  link=$(expr "$ls" : '.*-> \(.*\)$')
+  if expr "$link" : '/.*' >/dev/null; then
+    PRG="$link"
+  else
+    # shellcheck disable=SC2006
+    PRG=$(dirname "$PRG")/"$link"
+  fi
+done
+
+# shellcheck disable=SC2006
+PRGDIR=$(dirname "$PRG")
+EXECUTABLE=flink.sh
+
+# Check that target executable exists
+if ${os400}; then
+  # -x will Only work on the os400 if the files are:
+  # 1. owned by the user
+  # 2. owned by the PRIMARY group of the user
+  # this will not work if the user belongs in secondary groups
+  eval
+else
+  if [[ ! -x "$PRGDIR"/"$EXECUTABLE" ]]; then
+    echo "Cannot find $PRGDIR/$EXECUTABLE"
+    echo "The file is absent or does not have execute permission"
+    echo "This file is needed to run this program"
+    exit 1
+  fi
+fi
+
+exec "$PRGDIR"/"$EXECUTABLE" stop "$@"
diff --git a/quickstart-flink/quickstart-datastream/datastream_1.15/assembly/bin/startup.sh b/quickstart-flink/quickstart-datastream/datastream_1.15/assembly/bin/startup.sh
new file mode 100644
index 0000000..8d5cc2e
--- /dev/null
+++ b/quickstart-flink/quickstart-datastream/datastream_1.15/assembly/bin/startup.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+#
+# 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.
+#
+# -----------------------------------------------------------------------------
+#Start Script for the streampark-quickstart
+# -----------------------------------------------------------------------------
+#
+# Better OS/400 detection: see Bugzilla 31132
+os400=false
+# shellcheck disable=SC2006
+case "$(uname)" in
+OS400*) os400=true ;;
+esac
+
+# resolve links - $0 may be a softlink
+PRG="$0"
+
+while [[ -L "$PRG" ]]; do
+  # shellcheck disable=SC2006
+  ls=$(ls -ld "$PRG")
+  # shellcheck disable=SC2006
+  link=$(expr "$ls" : '.*-> \(.*\)$')
+  if expr "$link" : '/.*' >/dev/null; then
+    PRG="$link"
+  else
+    # shellcheck disable=SC2006
+    PRG=$(dirname "$PRG")/"$link"
+  fi
+done
+
+# shellcheck disable=SC2006
+PRGDIR=$(dirname "$PRG")
+EXECUTABLE=streampark.sh
+
+# Check that target executable exists
+if ${os400}; then
+  # -x will Only work on the os400 if the files are:
+  # 1. owned by the user
+  # 2. owned by the PRIMARY group of the user
+  # this will not work if the user belongs in secondary groups
+  eval
+else
+  if [[ ! -x "$PRGDIR"/"$EXECUTABLE" ]]; then
+    echo "Cannot find $PRGDIR/$EXECUTABLE"
+    echo "The file is absent or does not have execute permission"
+    echo "This file is needed to run this program"
+    exit 1
+  fi
+fi
+
+exec "$PRGDIR"/"$EXECUTABLE" start "$@"
diff --git a/quickstart-flink/quickstart-datastream/datastream_1.15/assembly/bin/streampark.sh b/quickstart-flink/quickstart-datastream/datastream_1.15/assembly/bin/streampark.sh
new file mode 100644
index 0000000..5eee8a5
--- /dev/null
+++ b/quickstart-flink/quickstart-datastream/datastream_1.15/assembly/bin/streampark.sh
@@ -0,0 +1,272 @@
+#!/bin/bash
+#
+# 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.
+#
+# -----------------------------------------------------------------------------
+#Start Script for the streampark-quickstart
+# -----------------------------------------------------------------------------
+#
+# Better OS/400 detection: see Bugzilla 31132
+
+#echo color
+WHITE_COLOR="\E[1;37m"
+RED_COLOR="\E[1;31m"
+BLUE_COLOR='\E[1;34m'
+GREEN_COLOR="\E[1;32m"
+YELLOW_COLOR="\E[1;33m"
+RES="\E[0m"
+
+echo_r() {
+  # Color red: Error, Failed
+  [[ $# -ne 1 ]] && return 1
+  # shellcheck disable=SC2059
+  printf "[${BLUE_COLOR}Flink${RES}] ${RED_COLOR}$1${RES}\n"
+}
+
+echo_g() {
+  # Color green: Success
+  [[ $# -ne 1 ]] && return 1
+  # shellcheck disable=SC2059
+  printf "[${BLUE_COLOR}Flink${RES}] ${GREEN_COLOR}$1${RES}\n"
+}
+
+echo_y() {
+  # Color yellow: Warning
+  [[ $# -ne 1 ]] && return 1
+  # shellcheck disable=SC2059
+  printf "[${BLUE_COLOR}Flink${RES}] ${YELLOW_COLOR}$1${RES}\n"
+}
+
+echo_w() {
+  # Color yellow: White
+  [[ $# -ne 1 ]] && return 1
+  # shellcheck disable=SC2059
+  printf "[${BLUE_COLOR}Flink${RES}] ${WHITE_COLOR}$1${RES}\n"
+}
+
+# OS specific support.  $var _must_ be set to either true or false.
+cygwin=false
+darwin=false
+os400=false
+hpux=false
+# shellcheck disable=SC2006
+case "$(uname)" in
+CYGWIN*) cygwin=true ;;
+Darwin*) darwin=true ;;
+OS400*) os400=true ;;
+HP-UX*) hpux=true ;;
+esac
+
+# resolve links - $0 may be a softlink
+PRG="$0"
+
+while [[ -L "$PRG" ]]; do
+  # shellcheck disable=SC2006
+  ls=$(ls -ld "$PRG")
+  # shellcheck disable=SC2006
+  link=$(expr "$ls" : '.*-> \(.*\)$')
+  if expr "$link" : '/.*' >/dev/null; then
+    PRG="$link"
+  else
+    # shellcheck disable=SC2006
+    PRG=$(dirname "$PRG")/"$link"
+  fi
+done
+
+# Get standard environment variables
+# shellcheck disable=SC2006
+PRGDIR=$(dirname "$PRG")
+
+# shellcheck disable=SC2124
+# shellcheck disable=SC2034
+RUN_ARGS="$@"
+#global variables....
+# shellcheck disable=SC2006
+# shellcheck disable=SC2164
+APP_HOME=$(
+  cd "$PRGDIR/.." >/dev/null
+  pwd
+)
+APP_BASE="$APP_HOME"
+APP_CONF="$APP_BASE"/conf
+APP_LOG="$APP_BASE"/logs
+APP_LIB="$APP_BASE"/lib
+# shellcheck disable=SC2034
+APP_BIN="$APP_BASE"/bin
+APP_TEMP="$APP_BASE"/temp
+[[ ! -d "$APP_LOG" ]] && mkdir "${APP_LOG}" >/dev/null
+[[ ! -d "$APP_TEMP" ]] && mkdir "${APP_TEMP}" >/dev/null
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if ${cygwin}; then
+  # shellcheck disable=SC2006
+  [[ -n "$APP_HOME" ]] && APP_HOME=$(cygpath --unix "$APP_HOME")
+  # shellcheck disable=SC2006
+  [[ -n "$APP_BASE" ]] && APP_BASE=$(cygpath --unix "$APP_BASE")
+fi
+
+# Ensure that neither APP_HOME nor APP_BASE contains a colon
+# as this is used as the separator in the classpath and Java provides no
+# mechanism for escaping if the same character appears in the path.
+case ${APP_HOME} in
+*:*)
+  echo "Using APP_HOME:   $APP_HOME"
+  echo "Unable to start as APP_HOME contains a colon (:) character"
+  exit 1
+  ;;
+esac
+case ${APP_BASE} in
+*:*)
+  echo "Using APP_BASE:   $APP_BASE"
+  echo "Unable to start as APP_BASE contains a colon (:) character"
+  exit 1
+  ;;
+esac
+
+# For OS400
+if ${os400}; then
+  # Set job priority to standard for interactive (interactive - 6) by using
+  # the interactive priority - 6, the helper threads that respond to requests
+  # will be running at the same priority as interactive jobs.
+  COMMAND='chgjob job('${JOBNAME}') runpty(6)'
+  system "${COMMAND}"
+  # Enable multi threading
+  export QIBM_MULTI_THREADED=Y
+fi
+
+# (0) export HADOOP_CLASSPATH
+# shellcheck disable=SC2006
+if [ x"$(hadoop classpath)" == x"" ]; then
+  echo_r " Please make sure to export the HADOOP_CLASSPATH environment variable or have hadoop in your classpath"
+else
+  # shellcheck disable=SC2155
+  export HADOOP_CLASSPATH=$(hadoop classpath)
+fi
+
+doStart() {
+  local yaml=""
+  if [[ $# -eq 0 ]]; then
+    yaml="application.yml"
+    echo_w "not input properties-file,use default application.yml"
+  else
+    #Solve the path problem, arbitrary path, ignore prefix, only take the content after conf/
+    if [ "$1" == "--conf" ]; then
+      shift
+      # shellcheck disable=SC2034
+      yaml=$(echo "$1" | awk -F 'conf/' '{print $2}')
+      shift
+    fi
+  fi
+
+  local app_proper=""
+  if [[ -f "$APP_CONF/$yaml" ]]; then
+    app_proper="$APP_CONF/$yaml"
+  fi
+
+  # flink main jar...
+  # shellcheck disable=SC2155
+  local jarfile="${APP_LIB}/$(basename "${APP_BASE}").jar"
+
+  local param_cli="org.apache.streampark.flink.core.conf.ParameterCli"
+
+  # shellcheck disable=SC2006
+  # shellcheck disable=SC2155
+  local app_name="$(java -cp "${jarfile}" $param_cli --name "${app_proper}")"
+
+  # shellcheck disable=SC2001
+  local safe_app_name="$(echo "$app_name" | sed "s/ /_/g")"
+
+  local trim="s/^[ \s]\{1,\}//g;s/[ \s]\{1,\}$//g"
+  # shellcheck disable=SC2006
+  # shellcheck disable=SC2155
+  local detached_mode="$(java -cp "${jarfile}" $param_cli --detached "$app_proper")"
+  # shellcheck disable=SC2006
+  # trim...
+  detached_mode="$(echo "$detached_mode" | sed "$trim")"
+  # shellcheck disable=SC2006
+  # shellcheck disable=SC2155
+  local option="$(java -cp "${jarfile}" $param_cli --option "$app_proper") $*"
+  # shellcheck disable=SC2006
+  option="$(echo "$option" | sed "$trim")"
+
+  # shellcheck disable=SC2006
+  # shellcheck disable=SC2155
+  local property_params="$(java -cp "${jarfile}" $param_cli --property "$app_proper")"
+  # shellcheck disable=SC2006
+  property_params="$(echo "$property_params" | sed "$trim")"
+
+  echo_g "${app_name} Starting by:<${detached_mode}> mode"
+
+  # json all params...
+  local runOption="$option"
+  if [ x"$property_params" != x"" ]; then
+    runOption="$runOption $property_params"
+  fi
+
+  local argsOption=""
+  if [ x"$app_proper" != x"" ]; then
+    argsOption="--conf $app_proper"
+  fi
+
+  if [ x"$detached_mode" == x"Detached" ]; then
+    flink run \
+    $runOption \
+    $jarfile \
+    $argsOption
+    echo "${safe_app_name}" >"${APP_TEMP}/.running"
+  else
+    # shellcheck disable=SC2006
+    # shellcheck disable=SC2155
+    local app_log_date=$(date "+%Y%m%d_%H%M%S")
+    local app_out="${APP_LOG}/${safe_app_name}-${app_log_date}.log"
+    flink run \
+    $runOption \
+    $jarfile \
+    $argsOption >> "$app_out" 2>&1 &
+    echo "${safe_app_name}" >"${APP_TEMP}/.running"
+    echo_g "${safe_app_name} starting,more detail please log:$app_out"
+  fi
+}
+
+doStop() {
+  # shellcheck disable=SC2155
+  # shellcheck disable=SC2034
+  local running_app=$(cat "${APP_TEMP/.running/}")
+  if [ x"${running_app}" != x"" ]; then
+    echo_w "can not found flink job!"
+  fi
+  flink list -r | grep "${running_app}" | awk '{print $4}' | xargs flink cancel
+}
+
+case "$1" in
+start)
+  shift
+  doStart "$@"
+  exit $?
+  ;;
+stop)
+  doStop
+  exit $?
+  ;;
+*)
+  echo_g "Unknown command: $1"
+  echo_g "commands:"
+  echo_g "  start             Start"
+  echo_g "  stop              Stop"
+  echo_g "                    are you running?"
+  exit 1
+  ;;
+esac
diff --git a/quickstart-flink/quickstart-datastream/datastream_1.16/assembly/bin/setclasspath.sh b/quickstart-flink/quickstart-datastream/datastream_1.16/assembly/bin/setclasspath.sh
new file mode 100644
index 0000000..1cd3a54
--- /dev/null
+++ b/quickstart-flink/quickstart-datastream/datastream_1.16/assembly/bin/setclasspath.sh
@@ -0,0 +1,98 @@
+#!/bin/bash
+#
+# 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.
+#
+# -----------------------------------------------------------------------------
+#  Set JAVA_HOME or JRE_HOME if not already set, ensure any provided settings
+#  are valid and consistent with the selected start-up options and set up the
+#  endorsed directory.
+# -----------------------------------------------------------------------------
+
+# Make sure prerequisite environment variables are set
+if [[ -z "$JAVA_HOME" && -z "$JRE_HOME" ]]; then
+  # shellcheck disable=SC2154
+  if ${darwin}; then
+    # Bugzilla 54390
+    if [[ -x '/usr/libexec/java_home' ]]; then
+      # shellcheck disable=SC2006
+      # shellcheck disable=SC2155
+      export JAVA_HOME=$(/usr/libexec/java_home)
+    # Bugzilla 37284 (reviewed).
+    elif [[ -d "/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home" ]]; then
+      export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home"
+    fi
+  else
+    # shellcheck disable=SC2006
+    # shellcheck disable=SC2230
+    JAVA_PATH=$(which java 2>/dev/null)
+    if [[ "x$JAVA_PATH" != "x" ]]; then
+      # shellcheck disable=SC2006
+      JAVA_PATH=$(dirname "${JAVA_PATH}" 2>/dev/null)
+      # shellcheck disable=SC2006
+      JRE_HOME=$(dirname "${JAVA_PATH}" 2>/dev/null)
+    fi
+    if [[ "x$JRE_HOME" == "x" ]]; then
+      # XXX: Should we try other locations?
+      if [[ -x /usr/bin/java ]]; then
+        JRE_HOME=/usr
+      fi
+    fi
+  fi
+  if [[ -z "$JAVA_HOME" && -z "$JRE_HOME" ]]; then
+    echo "Neither the JAVA_HOME nor the JRE_HOME environment variable is defined"
+    echo "At least one of these environment variable is needed to run this program"
+    exit 1
+  fi
+fi
+if [[ -z "$JAVA_HOME" && "$1" == "debug" ]]; then
+  echo "JAVA_HOME should point to a JDK in order to run in debug mode."
+  exit 1
+fi
+if [[ -z "$JRE_HOME" ]]; then
+  JRE_HOME="$JAVA_HOME"
+fi
+
+# If we're running under jdb, we need a full jdk.
+if [[ "$1" == "debug" ]]; then
+  # shellcheck disable=SC2154
+  if [[ "$os400" == "true" ]]; then
+    if [[ ! -x "$JAVA_HOME"/bin/java || ! -x "$JAVA_HOME"/bin/javac ]]; then
+      echo "The JAVA_HOME environment variable is not defined correctly"
+      echo "This environment variable is needed to run this program"
+      echo "NB: JAVA_HOME should point to a JDK not a JRE"
+      exit 1
+    fi
+  else
+    if [[ ! -x "$JAVA_HOME"/bin/java || ! -x "$JAVA_HOME"/bin/jdb || ! -x "$JAVA_HOME"/bin/javac ]]; then
+      echo "The JAVA_HOME environment variable is not defined correctly"
+      echo "This environment variable is needed to run this program"
+      echo "NB: JAVA_HOME should point to a JDK not a JRE"
+      exit 1
+    fi
+  fi
+fi
+
+# Set standard commands for invoking Java, if not already set.
+# shellcheck disable=SC2153
+if [[ -z "$_RUNJAVA" ]]; then
+  # shellcheck disable=SC2034
+  RUNJAVA="$JRE_HOME"/bin/java
+fi
+if [[ "$os400" != "true" ]]; then
+  if [[ -z "$_RUNJDB" ]]; then
+    _RUNJDB="$JAVA_HOME"/bin/jdb
+  fi
+fi
diff --git a/quickstart-flink/quickstart-datastream/datastream_1.16/assembly/bin/shutdown.sh b/quickstart-flink/quickstart-datastream/datastream_1.16/assembly/bin/shutdown.sh
new file mode 100644
index 0000000..b769953
--- /dev/null
+++ b/quickstart-flink/quickstart-datastream/datastream_1.16/assembly/bin/shutdown.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+#
+# 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.
+#
+# -----------------------------------------------------------------------------
+#Stop Script for the streampark-quickstart
+# -----------------------------------------------------------------------------
+#
+# Better OS/400 detection: see Bugzilla 31132
+os400=false
+# shellcheck disable=SC2006
+case "$(uname)" in
+OS400*) os400=true ;;
+esac
+
+# resolve links - $0 may be a softlink
+PRG="$0"
+
+while [[ -L "$PRG" ]]; do
+  # shellcheck disable=SC2006
+  ls=$(ls -ld "$PRG")
+  # shellcheck disable=SC2006
+  link=$(expr "$ls" : '.*-> \(.*\)$')
+  if expr "$link" : '/.*' >/dev/null; then
+    PRG="$link"
+  else
+    # shellcheck disable=SC2006
+    PRG=$(dirname "$PRG")/"$link"
+  fi
+done
+
+# shellcheck disable=SC2006
+PRGDIR=$(dirname "$PRG")
+EXECUTABLE=flink.sh
+
+# Check that target executable exists
+if ${os400}; then
+  # -x will Only work on the os400 if the files are:
+  # 1. owned by the user
+  # 2. owned by the PRIMARY group of the user
+  # this will not work if the user belongs in secondary groups
+  eval
+else
+  if [[ ! -x "$PRGDIR"/"$EXECUTABLE" ]]; then
+    echo "Cannot find $PRGDIR/$EXECUTABLE"
+    echo "The file is absent or does not have execute permission"
+    echo "This file is needed to run this program"
+    exit 1
+  fi
+fi
+
+exec "$PRGDIR"/"$EXECUTABLE" stop "$@"
diff --git a/quickstart-flink/quickstart-datastream/datastream_1.16/assembly/bin/startup.sh b/quickstart-flink/quickstart-datastream/datastream_1.16/assembly/bin/startup.sh
new file mode 100644
index 0000000..8d5cc2e
--- /dev/null
+++ b/quickstart-flink/quickstart-datastream/datastream_1.16/assembly/bin/startup.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+#
+# 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.
+#
+# -----------------------------------------------------------------------------
+#Start Script for the streampark-quickstart
+# -----------------------------------------------------------------------------
+#
+# Better OS/400 detection: see Bugzilla 31132
+os400=false
+# shellcheck disable=SC2006
+case "$(uname)" in
+OS400*) os400=true ;;
+esac
+
+# resolve links - $0 may be a softlink
+PRG="$0"
+
+while [[ -L "$PRG" ]]; do
+  # shellcheck disable=SC2006
+  ls=$(ls -ld "$PRG")
+  # shellcheck disable=SC2006
+  link=$(expr "$ls" : '.*-> \(.*\)$')
+  if expr "$link" : '/.*' >/dev/null; then
+    PRG="$link"
+  else
+    # shellcheck disable=SC2006
+    PRG=$(dirname "$PRG")/"$link"
+  fi
+done
+
+# shellcheck disable=SC2006
+PRGDIR=$(dirname "$PRG")
+EXECUTABLE=streampark.sh
+
+# Check that target executable exists
+if ${os400}; then
+  # -x will Only work on the os400 if the files are:
+  # 1. owned by the user
+  # 2. owned by the PRIMARY group of the user
+  # this will not work if the user belongs in secondary groups
+  eval
+else
+  if [[ ! -x "$PRGDIR"/"$EXECUTABLE" ]]; then
+    echo "Cannot find $PRGDIR/$EXECUTABLE"
+    echo "The file is absent or does not have execute permission"
+    echo "This file is needed to run this program"
+    exit 1
+  fi
+fi
+
+exec "$PRGDIR"/"$EXECUTABLE" start "$@"
diff --git a/quickstart-flink/quickstart-datastream/datastream_1.16/assembly/bin/streampark.sh b/quickstart-flink/quickstart-datastream/datastream_1.16/assembly/bin/streampark.sh
new file mode 100644
index 0000000..5eee8a5
--- /dev/null
+++ b/quickstart-flink/quickstart-datastream/datastream_1.16/assembly/bin/streampark.sh
@@ -0,0 +1,272 @@
+#!/bin/bash
+#
+# 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.
+#
+# -----------------------------------------------------------------------------
+#Start Script for the streampark-quickstart
+# -----------------------------------------------------------------------------
+#
+# Better OS/400 detection: see Bugzilla 31132
+
+#echo color
+WHITE_COLOR="\E[1;37m"
+RED_COLOR="\E[1;31m"
+BLUE_COLOR='\E[1;34m'
+GREEN_COLOR="\E[1;32m"
+YELLOW_COLOR="\E[1;33m"
+RES="\E[0m"
+
+echo_r() {
+  # Color red: Error, Failed
+  [[ $# -ne 1 ]] && return 1
+  # shellcheck disable=SC2059
+  printf "[${BLUE_COLOR}Flink${RES}] ${RED_COLOR}$1${RES}\n"
+}
+
+echo_g() {
+  # Color green: Success
+  [[ $# -ne 1 ]] && return 1
+  # shellcheck disable=SC2059
+  printf "[${BLUE_COLOR}Flink${RES}] ${GREEN_COLOR}$1${RES}\n"
+}
+
+echo_y() {
+  # Color yellow: Warning
+  [[ $# -ne 1 ]] && return 1
+  # shellcheck disable=SC2059
+  printf "[${BLUE_COLOR}Flink${RES}] ${YELLOW_COLOR}$1${RES}\n"
+}
+
+echo_w() {
+  # Color yellow: White
+  [[ $# -ne 1 ]] && return 1
+  # shellcheck disable=SC2059
+  printf "[${BLUE_COLOR}Flink${RES}] ${WHITE_COLOR}$1${RES}\n"
+}
+
+# OS specific support.  $var _must_ be set to either true or false.
+cygwin=false
+darwin=false
+os400=false
+hpux=false
+# shellcheck disable=SC2006
+case "$(uname)" in
+CYGWIN*) cygwin=true ;;
+Darwin*) darwin=true ;;
+OS400*) os400=true ;;
+HP-UX*) hpux=true ;;
+esac
+
+# resolve links - $0 may be a softlink
+PRG="$0"
+
+while [[ -L "$PRG" ]]; do
+  # shellcheck disable=SC2006
+  ls=$(ls -ld "$PRG")
+  # shellcheck disable=SC2006
+  link=$(expr "$ls" : '.*-> \(.*\)$')
+  if expr "$link" : '/.*' >/dev/null; then
+    PRG="$link"
+  else
+    # shellcheck disable=SC2006
+    PRG=$(dirname "$PRG")/"$link"
+  fi
+done
+
+# Get standard environment variables
+# shellcheck disable=SC2006
+PRGDIR=$(dirname "$PRG")
+
+# shellcheck disable=SC2124
+# shellcheck disable=SC2034
+RUN_ARGS="$@"
+#global variables....
+# shellcheck disable=SC2006
+# shellcheck disable=SC2164
+APP_HOME=$(
+  cd "$PRGDIR/.." >/dev/null
+  pwd
+)
+APP_BASE="$APP_HOME"
+APP_CONF="$APP_BASE"/conf
+APP_LOG="$APP_BASE"/logs
+APP_LIB="$APP_BASE"/lib
+# shellcheck disable=SC2034
+APP_BIN="$APP_BASE"/bin
+APP_TEMP="$APP_BASE"/temp
+[[ ! -d "$APP_LOG" ]] && mkdir "${APP_LOG}" >/dev/null
+[[ ! -d "$APP_TEMP" ]] && mkdir "${APP_TEMP}" >/dev/null
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if ${cygwin}; then
+  # shellcheck disable=SC2006
+  [[ -n "$APP_HOME" ]] && APP_HOME=$(cygpath --unix "$APP_HOME")
+  # shellcheck disable=SC2006
+  [[ -n "$APP_BASE" ]] && APP_BASE=$(cygpath --unix "$APP_BASE")
+fi
+
+# Ensure that neither APP_HOME nor APP_BASE contains a colon
+# as this is used as the separator in the classpath and Java provides no
+# mechanism for escaping if the same character appears in the path.
+case ${APP_HOME} in
+*:*)
+  echo "Using APP_HOME:   $APP_HOME"
+  echo "Unable to start as APP_HOME contains a colon (:) character"
+  exit 1
+  ;;
+esac
+case ${APP_BASE} in
+*:*)
+  echo "Using APP_BASE:   $APP_BASE"
+  echo "Unable to start as APP_BASE contains a colon (:) character"
+  exit 1
+  ;;
+esac
+
+# For OS400
+if ${os400}; then
+  # Set job priority to standard for interactive (interactive - 6) by using
+  # the interactive priority - 6, the helper threads that respond to requests
+  # will be running at the same priority as interactive jobs.
+  COMMAND='chgjob job('${JOBNAME}') runpty(6)'
+  system "${COMMAND}"
+  # Enable multi threading
+  export QIBM_MULTI_THREADED=Y
+fi
+
+# (0) export HADOOP_CLASSPATH
+# shellcheck disable=SC2006
+if [ x"$(hadoop classpath)" == x"" ]; then
+  echo_r " Please make sure to export the HADOOP_CLASSPATH environment variable or have hadoop in your classpath"
+else
+  # shellcheck disable=SC2155
+  export HADOOP_CLASSPATH=$(hadoop classpath)
+fi
+
+doStart() {
+  local yaml=""
+  if [[ $# -eq 0 ]]; then
+    yaml="application.yml"
+    echo_w "not input properties-file,use default application.yml"
+  else
+    #Solve the path problem, arbitrary path, ignore prefix, only take the content after conf/
+    if [ "$1" == "--conf" ]; then
+      shift
+      # shellcheck disable=SC2034
+      yaml=$(echo "$1" | awk -F 'conf/' '{print $2}')
+      shift
+    fi
+  fi
+
+  local app_proper=""
+  if [[ -f "$APP_CONF/$yaml" ]]; then
+    app_proper="$APP_CONF/$yaml"
+  fi
+
+  # flink main jar...
+  # shellcheck disable=SC2155
+  local jarfile="${APP_LIB}/$(basename "${APP_BASE}").jar"
+
+  local param_cli="org.apache.streampark.flink.core.conf.ParameterCli"
+
+  # shellcheck disable=SC2006
+  # shellcheck disable=SC2155
+  local app_name="$(java -cp "${jarfile}" $param_cli --name "${app_proper}")"
+
+  # shellcheck disable=SC2001
+  local safe_app_name="$(echo "$app_name" | sed "s/ /_/g")"
+
+  local trim="s/^[ \s]\{1,\}//g;s/[ \s]\{1,\}$//g"
+  # shellcheck disable=SC2006
+  # shellcheck disable=SC2155
+  local detached_mode="$(java -cp "${jarfile}" $param_cli --detached "$app_proper")"
+  # shellcheck disable=SC2006
+  # trim...
+  detached_mode="$(echo "$detached_mode" | sed "$trim")"
+  # shellcheck disable=SC2006
+  # shellcheck disable=SC2155
+  local option="$(java -cp "${jarfile}" $param_cli --option "$app_proper") $*"
+  # shellcheck disable=SC2006
+  option="$(echo "$option" | sed "$trim")"
+
+  # shellcheck disable=SC2006
+  # shellcheck disable=SC2155
+  local property_params="$(java -cp "${jarfile}" $param_cli --property "$app_proper")"
+  # shellcheck disable=SC2006
+  property_params="$(echo "$property_params" | sed "$trim")"
+
+  echo_g "${app_name} Starting by:<${detached_mode}> mode"
+
+  # json all params...
+  local runOption="$option"
+  if [ x"$property_params" != x"" ]; then
+    runOption="$runOption $property_params"
+  fi
+
+  local argsOption=""
+  if [ x"$app_proper" != x"" ]; then
+    argsOption="--conf $app_proper"
+  fi
+
+  if [ x"$detached_mode" == x"Detached" ]; then
+    flink run \
+    $runOption \
+    $jarfile \
+    $argsOption
+    echo "${safe_app_name}" >"${APP_TEMP}/.running"
+  else
+    # shellcheck disable=SC2006
+    # shellcheck disable=SC2155
+    local app_log_date=$(date "+%Y%m%d_%H%M%S")
+    local app_out="${APP_LOG}/${safe_app_name}-${app_log_date}.log"
+    flink run \
+    $runOption \
+    $jarfile \
+    $argsOption >> "$app_out" 2>&1 &
+    echo "${safe_app_name}" >"${APP_TEMP}/.running"
+    echo_g "${safe_app_name} starting,more detail please log:$app_out"
+  fi
+}
+
+doStop() {
+  # shellcheck disable=SC2155
+  # shellcheck disable=SC2034
+  local running_app=$(cat "${APP_TEMP/.running/}")
+  if [ x"${running_app}" != x"" ]; then
+    echo_w "can not found flink job!"
+  fi
+  flink list -r | grep "${running_app}" | awk '{print $4}' | xargs flink cancel
+}
+
+case "$1" in
+start)
+  shift
+  doStart "$@"
+  exit $?
+  ;;
+stop)
+  doStop
+  exit $?
+  ;;
+*)
+  echo_g "Unknown command: $1"
+  echo_g "commands:"
+  echo_g "  start             Start"
+  echo_g "  stop              Stop"
+  echo_g "                    are you running?"
+  exit 1
+  ;;
+esac
diff --git a/quickstart-flink/quickstart-flinksql/flinksql_1.15/assembly/bin/setclasspath.sh b/quickstart-flink/quickstart-flinksql/flinksql_1.15/assembly/bin/setclasspath.sh
new file mode 100644
index 0000000..1cd3a54
--- /dev/null
+++ b/quickstart-flink/quickstart-flinksql/flinksql_1.15/assembly/bin/setclasspath.sh
@@ -0,0 +1,98 @@
+#!/bin/bash
+#
+# 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.
+#
+# -----------------------------------------------------------------------------
+#  Set JAVA_HOME or JRE_HOME if not already set, ensure any provided settings
+#  are valid and consistent with the selected start-up options and set up the
+#  endorsed directory.
+# -----------------------------------------------------------------------------
+
+# Make sure prerequisite environment variables are set
+if [[ -z "$JAVA_HOME" && -z "$JRE_HOME" ]]; then
+  # shellcheck disable=SC2154
+  if ${darwin}; then
+    # Bugzilla 54390
+    if [[ -x '/usr/libexec/java_home' ]]; then
+      # shellcheck disable=SC2006
+      # shellcheck disable=SC2155
+      export JAVA_HOME=$(/usr/libexec/java_home)
+    # Bugzilla 37284 (reviewed).
+    elif [[ -d "/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home" ]]; then
+      export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home"
+    fi
+  else
+    # shellcheck disable=SC2006
+    # shellcheck disable=SC2230
+    JAVA_PATH=$(which java 2>/dev/null)
+    if [[ "x$JAVA_PATH" != "x" ]]; then
+      # shellcheck disable=SC2006
+      JAVA_PATH=$(dirname "${JAVA_PATH}" 2>/dev/null)
+      # shellcheck disable=SC2006
+      JRE_HOME=$(dirname "${JAVA_PATH}" 2>/dev/null)
+    fi
+    if [[ "x$JRE_HOME" == "x" ]]; then
+      # XXX: Should we try other locations?
+      if [[ -x /usr/bin/java ]]; then
+        JRE_HOME=/usr
+      fi
+    fi
+  fi
+  if [[ -z "$JAVA_HOME" && -z "$JRE_HOME" ]]; then
+    echo "Neither the JAVA_HOME nor the JRE_HOME environment variable is defined"
+    echo "At least one of these environment variable is needed to run this program"
+    exit 1
+  fi
+fi
+if [[ -z "$JAVA_HOME" && "$1" == "debug" ]]; then
+  echo "JAVA_HOME should point to a JDK in order to run in debug mode."
+  exit 1
+fi
+if [[ -z "$JRE_HOME" ]]; then
+  JRE_HOME="$JAVA_HOME"
+fi
+
+# If we're running under jdb, we need a full jdk.
+if [[ "$1" == "debug" ]]; then
+  # shellcheck disable=SC2154
+  if [[ "$os400" == "true" ]]; then
+    if [[ ! -x "$JAVA_HOME"/bin/java || ! -x "$JAVA_HOME"/bin/javac ]]; then
+      echo "The JAVA_HOME environment variable is not defined correctly"
+      echo "This environment variable is needed to run this program"
+      echo "NB: JAVA_HOME should point to a JDK not a JRE"
+      exit 1
+    fi
+  else
+    if [[ ! -x "$JAVA_HOME"/bin/java || ! -x "$JAVA_HOME"/bin/jdb || ! -x "$JAVA_HOME"/bin/javac ]]; then
+      echo "The JAVA_HOME environment variable is not defined correctly"
+      echo "This environment variable is needed to run this program"
+      echo "NB: JAVA_HOME should point to a JDK not a JRE"
+      exit 1
+    fi
+  fi
+fi
+
+# Set standard commands for invoking Java, if not already set.
+# shellcheck disable=SC2153
+if [[ -z "$_RUNJAVA" ]]; then
+  # shellcheck disable=SC2034
+  RUNJAVA="$JRE_HOME"/bin/java
+fi
+if [[ "$os400" != "true" ]]; then
+  if [[ -z "$_RUNJDB" ]]; then
+    _RUNJDB="$JAVA_HOME"/bin/jdb
+  fi
+fi
diff --git a/quickstart-flink/quickstart-flinksql/flinksql_1.15/assembly/bin/shutdown.sh b/quickstart-flink/quickstart-flinksql/flinksql_1.15/assembly/bin/shutdown.sh
new file mode 100644
index 0000000..b769953
--- /dev/null
+++ b/quickstart-flink/quickstart-flinksql/flinksql_1.15/assembly/bin/shutdown.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+#
+# 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.
+#
+# -----------------------------------------------------------------------------
+#Stop Script for the streampark-quickstart
+# -----------------------------------------------------------------------------
+#
+# Better OS/400 detection: see Bugzilla 31132
+os400=false
+# shellcheck disable=SC2006
+case "$(uname)" in
+OS400*) os400=true ;;
+esac
+
+# resolve links - $0 may be a softlink
+PRG="$0"
+
+while [[ -L "$PRG" ]]; do
+  # shellcheck disable=SC2006
+  ls=$(ls -ld "$PRG")
+  # shellcheck disable=SC2006
+  link=$(expr "$ls" : '.*-> \(.*\)$')
+  if expr "$link" : '/.*' >/dev/null; then
+    PRG="$link"
+  else
+    # shellcheck disable=SC2006
+    PRG=$(dirname "$PRG")/"$link"
+  fi
+done
+
+# shellcheck disable=SC2006
+PRGDIR=$(dirname "$PRG")
+EXECUTABLE=flink.sh
+
+# Check that target executable exists
+if ${os400}; then
+  # -x will Only work on the os400 if the files are:
+  # 1. owned by the user
+  # 2. owned by the PRIMARY group of the user
+  # this will not work if the user belongs in secondary groups
+  eval
+else
+  if [[ ! -x "$PRGDIR"/"$EXECUTABLE" ]]; then
+    echo "Cannot find $PRGDIR/$EXECUTABLE"
+    echo "The file is absent or does not have execute permission"
+    echo "This file is needed to run this program"
+    exit 1
+  fi
+fi
+
+exec "$PRGDIR"/"$EXECUTABLE" stop "$@"
diff --git a/quickstart-flink/quickstart-flinksql/flinksql_1.15/assembly/bin/startup.sh b/quickstart-flink/quickstart-flinksql/flinksql_1.15/assembly/bin/startup.sh
new file mode 100644
index 0000000..8d5cc2e
--- /dev/null
+++ b/quickstart-flink/quickstart-flinksql/flinksql_1.15/assembly/bin/startup.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+#
+# 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.
+#
+# -----------------------------------------------------------------------------
+#Start Script for the streampark-quickstart
+# -----------------------------------------------------------------------------
+#
+# Better OS/400 detection: see Bugzilla 31132
+os400=false
+# shellcheck disable=SC2006
+case "$(uname)" in
+OS400*) os400=true ;;
+esac
+
+# resolve links - $0 may be a softlink
+PRG="$0"
+
+while [[ -L "$PRG" ]]; do
+  # shellcheck disable=SC2006
+  ls=$(ls -ld "$PRG")
+  # shellcheck disable=SC2006
+  link=$(expr "$ls" : '.*-> \(.*\)$')
+  if expr "$link" : '/.*' >/dev/null; then
+    PRG="$link"
+  else
+    # shellcheck disable=SC2006
+    PRG=$(dirname "$PRG")/"$link"
+  fi
+done
+
+# shellcheck disable=SC2006
+PRGDIR=$(dirname "$PRG")
+EXECUTABLE=streampark.sh
+
+# Check that target executable exists
+if ${os400}; then
+  # -x will Only work on the os400 if the files are:
+  # 1. owned by the user
+  # 2. owned by the PRIMARY group of the user
+  # this will not work if the user belongs in secondary groups
+  eval
+else
+  if [[ ! -x "$PRGDIR"/"$EXECUTABLE" ]]; then
+    echo "Cannot find $PRGDIR/$EXECUTABLE"
+    echo "The file is absent or does not have execute permission"
+    echo "This file is needed to run this program"
+    exit 1
+  fi
+fi
+
+exec "$PRGDIR"/"$EXECUTABLE" start "$@"
diff --git a/quickstart-flink/quickstart-flinksql/flinksql_1.15/assembly/bin/streampark.sh b/quickstart-flink/quickstart-flinksql/flinksql_1.15/assembly/bin/streampark.sh
new file mode 100644
index 0000000..5eee8a5
--- /dev/null
+++ b/quickstart-flink/quickstart-flinksql/flinksql_1.15/assembly/bin/streampark.sh
@@ -0,0 +1,272 @@
+#!/bin/bash
+#
+# 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.
+#
+# -----------------------------------------------------------------------------
+#Start Script for the streampark-quickstart
+# -----------------------------------------------------------------------------
+#
+# Better OS/400 detection: see Bugzilla 31132
+
+#echo color
+WHITE_COLOR="\E[1;37m"
+RED_COLOR="\E[1;31m"
+BLUE_COLOR='\E[1;34m'
+GREEN_COLOR="\E[1;32m"
+YELLOW_COLOR="\E[1;33m"
+RES="\E[0m"
+
+echo_r() {
+  # Color red: Error, Failed
+  [[ $# -ne 1 ]] && return 1
+  # shellcheck disable=SC2059
+  printf "[${BLUE_COLOR}Flink${RES}] ${RED_COLOR}$1${RES}\n"
+}
+
+echo_g() {
+  # Color green: Success
+  [[ $# -ne 1 ]] && return 1
+  # shellcheck disable=SC2059
+  printf "[${BLUE_COLOR}Flink${RES}] ${GREEN_COLOR}$1${RES}\n"
+}
+
+echo_y() {
+  # Color yellow: Warning
+  [[ $# -ne 1 ]] && return 1
+  # shellcheck disable=SC2059
+  printf "[${BLUE_COLOR}Flink${RES}] ${YELLOW_COLOR}$1${RES}\n"
+}
+
+echo_w() {
+  # Color yellow: White
+  [[ $# -ne 1 ]] && return 1
+  # shellcheck disable=SC2059
+  printf "[${BLUE_COLOR}Flink${RES}] ${WHITE_COLOR}$1${RES}\n"
+}
+
+# OS specific support.  $var _must_ be set to either true or false.
+cygwin=false
+darwin=false
+os400=false
+hpux=false
+# shellcheck disable=SC2006
+case "$(uname)" in
+CYGWIN*) cygwin=true ;;
+Darwin*) darwin=true ;;
+OS400*) os400=true ;;
+HP-UX*) hpux=true ;;
+esac
+
+# resolve links - $0 may be a softlink
+PRG="$0"
+
+while [[ -L "$PRG" ]]; do
+  # shellcheck disable=SC2006
+  ls=$(ls -ld "$PRG")
+  # shellcheck disable=SC2006
+  link=$(expr "$ls" : '.*-> \(.*\)$')
+  if expr "$link" : '/.*' >/dev/null; then
+    PRG="$link"
+  else
+    # shellcheck disable=SC2006
+    PRG=$(dirname "$PRG")/"$link"
+  fi
+done
+
+# Get standard environment variables
+# shellcheck disable=SC2006
+PRGDIR=$(dirname "$PRG")
+
+# shellcheck disable=SC2124
+# shellcheck disable=SC2034
+RUN_ARGS="$@"
+#global variables....
+# shellcheck disable=SC2006
+# shellcheck disable=SC2164
+APP_HOME=$(
+  cd "$PRGDIR/.." >/dev/null
+  pwd
+)
+APP_BASE="$APP_HOME"
+APP_CONF="$APP_BASE"/conf
+APP_LOG="$APP_BASE"/logs
+APP_LIB="$APP_BASE"/lib
+# shellcheck disable=SC2034
+APP_BIN="$APP_BASE"/bin
+APP_TEMP="$APP_BASE"/temp
+[[ ! -d "$APP_LOG" ]] && mkdir "${APP_LOG}" >/dev/null
+[[ ! -d "$APP_TEMP" ]] && mkdir "${APP_TEMP}" >/dev/null
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if ${cygwin}; then
+  # shellcheck disable=SC2006
+  [[ -n "$APP_HOME" ]] && APP_HOME=$(cygpath --unix "$APP_HOME")
+  # shellcheck disable=SC2006
+  [[ -n "$APP_BASE" ]] && APP_BASE=$(cygpath --unix "$APP_BASE")
+fi
+
+# Ensure that neither APP_HOME nor APP_BASE contains a colon
+# as this is used as the separator in the classpath and Java provides no
+# mechanism for escaping if the same character appears in the path.
+case ${APP_HOME} in
+*:*)
+  echo "Using APP_HOME:   $APP_HOME"
+  echo "Unable to start as APP_HOME contains a colon (:) character"
+  exit 1
+  ;;
+esac
+case ${APP_BASE} in
+*:*)
+  echo "Using APP_BASE:   $APP_BASE"
+  echo "Unable to start as APP_BASE contains a colon (:) character"
+  exit 1
+  ;;
+esac
+
+# For OS400
+if ${os400}; then
+  # Set job priority to standard for interactive (interactive - 6) by using
+  # the interactive priority - 6, the helper threads that respond to requests
+  # will be running at the same priority as interactive jobs.
+  COMMAND='chgjob job('${JOBNAME}') runpty(6)'
+  system "${COMMAND}"
+  # Enable multi threading
+  export QIBM_MULTI_THREADED=Y
+fi
+
+# (0) export HADOOP_CLASSPATH
+# shellcheck disable=SC2006
+if [ x"$(hadoop classpath)" == x"" ]; then
+  echo_r " Please make sure to export the HADOOP_CLASSPATH environment variable or have hadoop in your classpath"
+else
+  # shellcheck disable=SC2155
+  export HADOOP_CLASSPATH=$(hadoop classpath)
+fi
+
+doStart() {
+  local yaml=""
+  if [[ $# -eq 0 ]]; then
+    yaml="application.yml"
+    echo_w "not input properties-file,use default application.yml"
+  else
+    #Solve the path problem, arbitrary path, ignore prefix, only take the content after conf/
+    if [ "$1" == "--conf" ]; then
+      shift
+      # shellcheck disable=SC2034
+      yaml=$(echo "$1" | awk -F 'conf/' '{print $2}')
+      shift
+    fi
+  fi
+
+  local app_proper=""
+  if [[ -f "$APP_CONF/$yaml" ]]; then
+    app_proper="$APP_CONF/$yaml"
+  fi
+
+  # flink main jar...
+  # shellcheck disable=SC2155
+  local jarfile="${APP_LIB}/$(basename "${APP_BASE}").jar"
+
+  local param_cli="org.apache.streampark.flink.core.conf.ParameterCli"
+
+  # shellcheck disable=SC2006
+  # shellcheck disable=SC2155
+  local app_name="$(java -cp "${jarfile}" $param_cli --name "${app_proper}")"
+
+  # shellcheck disable=SC2001
+  local safe_app_name="$(echo "$app_name" | sed "s/ /_/g")"
+
+  local trim="s/^[ \s]\{1,\}//g;s/[ \s]\{1,\}$//g"
+  # shellcheck disable=SC2006
+  # shellcheck disable=SC2155
+  local detached_mode="$(java -cp "${jarfile}" $param_cli --detached "$app_proper")"
+  # shellcheck disable=SC2006
+  # trim...
+  detached_mode="$(echo "$detached_mode" | sed "$trim")"
+  # shellcheck disable=SC2006
+  # shellcheck disable=SC2155
+  local option="$(java -cp "${jarfile}" $param_cli --option "$app_proper") $*"
+  # shellcheck disable=SC2006
+  option="$(echo "$option" | sed "$trim")"
+
+  # shellcheck disable=SC2006
+  # shellcheck disable=SC2155
+  local property_params="$(java -cp "${jarfile}" $param_cli --property "$app_proper")"
+  # shellcheck disable=SC2006
+  property_params="$(echo "$property_params" | sed "$trim")"
+
+  echo_g "${app_name} Starting by:<${detached_mode}> mode"
+
+  # json all params...
+  local runOption="$option"
+  if [ x"$property_params" != x"" ]; then
+    runOption="$runOption $property_params"
+  fi
+
+  local argsOption=""
+  if [ x"$app_proper" != x"" ]; then
+    argsOption="--conf $app_proper"
+  fi
+
+  if [ x"$detached_mode" == x"Detached" ]; then
+    flink run \
+    $runOption \
+    $jarfile \
+    $argsOption
+    echo "${safe_app_name}" >"${APP_TEMP}/.running"
+  else
+    # shellcheck disable=SC2006
+    # shellcheck disable=SC2155
+    local app_log_date=$(date "+%Y%m%d_%H%M%S")
+    local app_out="${APP_LOG}/${safe_app_name}-${app_log_date}.log"
+    flink run \
+    $runOption \
+    $jarfile \
+    $argsOption >> "$app_out" 2>&1 &
+    echo "${safe_app_name}" >"${APP_TEMP}/.running"
+    echo_g "${safe_app_name} starting,more detail please log:$app_out"
+  fi
+}
+
+doStop() {
+  # shellcheck disable=SC2155
+  # shellcheck disable=SC2034
+  local running_app=$(cat "${APP_TEMP/.running/}")
+  if [ x"${running_app}" != x"" ]; then
+    echo_w "can not found flink job!"
+  fi
+  flink list -r | grep "${running_app}" | awk '{print $4}' | xargs flink cancel
+}
+
+case "$1" in
+start)
+  shift
+  doStart "$@"
+  exit $?
+  ;;
+stop)
+  doStop
+  exit $?
+  ;;
+*)
+  echo_g "Unknown command: $1"
+  echo_g "commands:"
+  echo_g "  start             Start"
+  echo_g "  stop              Stop"
+  echo_g "                    are you running?"
+  exit 1
+  ;;
+esac
diff --git a/quickstart-flink/quickstart-flinksql/flinksql_1.16/assembly/bin/setclasspath.sh b/quickstart-flink/quickstart-flinksql/flinksql_1.16/assembly/bin/setclasspath.sh
new file mode 100644
index 0000000..1cd3a54
--- /dev/null
+++ b/quickstart-flink/quickstart-flinksql/flinksql_1.16/assembly/bin/setclasspath.sh
@@ -0,0 +1,98 @@
+#!/bin/bash
+#
+# 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.
+#
+# -----------------------------------------------------------------------------
+#  Set JAVA_HOME or JRE_HOME if not already set, ensure any provided settings
+#  are valid and consistent with the selected start-up options and set up the
+#  endorsed directory.
+# -----------------------------------------------------------------------------
+
+# Make sure prerequisite environment variables are set
+if [[ -z "$JAVA_HOME" && -z "$JRE_HOME" ]]; then
+  # shellcheck disable=SC2154
+  if ${darwin}; then
+    # Bugzilla 54390
+    if [[ -x '/usr/libexec/java_home' ]]; then
+      # shellcheck disable=SC2006
+      # shellcheck disable=SC2155
+      export JAVA_HOME=$(/usr/libexec/java_home)
+    # Bugzilla 37284 (reviewed).
+    elif [[ -d "/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home" ]]; then
+      export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home"
+    fi
+  else
+    # shellcheck disable=SC2006
+    # shellcheck disable=SC2230
+    JAVA_PATH=$(which java 2>/dev/null)
+    if [[ "x$JAVA_PATH" != "x" ]]; then
+      # shellcheck disable=SC2006
+      JAVA_PATH=$(dirname "${JAVA_PATH}" 2>/dev/null)
+      # shellcheck disable=SC2006
+      JRE_HOME=$(dirname "${JAVA_PATH}" 2>/dev/null)
+    fi
+    if [[ "x$JRE_HOME" == "x" ]]; then
+      # XXX: Should we try other locations?
+      if [[ -x /usr/bin/java ]]; then
+        JRE_HOME=/usr
+      fi
+    fi
+  fi
+  if [[ -z "$JAVA_HOME" && -z "$JRE_HOME" ]]; then
+    echo "Neither the JAVA_HOME nor the JRE_HOME environment variable is defined"
+    echo "At least one of these environment variable is needed to run this program"
+    exit 1
+  fi
+fi
+if [[ -z "$JAVA_HOME" && "$1" == "debug" ]]; then
+  echo "JAVA_HOME should point to a JDK in order to run in debug mode."
+  exit 1
+fi
+if [[ -z "$JRE_HOME" ]]; then
+  JRE_HOME="$JAVA_HOME"
+fi
+
+# If we're running under jdb, we need a full jdk.
+if [[ "$1" == "debug" ]]; then
+  # shellcheck disable=SC2154
+  if [[ "$os400" == "true" ]]; then
+    if [[ ! -x "$JAVA_HOME"/bin/java || ! -x "$JAVA_HOME"/bin/javac ]]; then
+      echo "The JAVA_HOME environment variable is not defined correctly"
+      echo "This environment variable is needed to run this program"
+      echo "NB: JAVA_HOME should point to a JDK not a JRE"
+      exit 1
+    fi
+  else
+    if [[ ! -x "$JAVA_HOME"/bin/java || ! -x "$JAVA_HOME"/bin/jdb || ! -x "$JAVA_HOME"/bin/javac ]]; then
+      echo "The JAVA_HOME environment variable is not defined correctly"
+      echo "This environment variable is needed to run this program"
+      echo "NB: JAVA_HOME should point to a JDK not a JRE"
+      exit 1
+    fi
+  fi
+fi
+
+# Set standard commands for invoking Java, if not already set.
+# shellcheck disable=SC2153
+if [[ -z "$_RUNJAVA" ]]; then
+  # shellcheck disable=SC2034
+  RUNJAVA="$JRE_HOME"/bin/java
+fi
+if [[ "$os400" != "true" ]]; then
+  if [[ -z "$_RUNJDB" ]]; then
+    _RUNJDB="$JAVA_HOME"/bin/jdb
+  fi
+fi
diff --git a/quickstart-flink/quickstart-flinksql/flinksql_1.16/assembly/bin/shutdown.sh b/quickstart-flink/quickstart-flinksql/flinksql_1.16/assembly/bin/shutdown.sh
new file mode 100644
index 0000000..b769953
--- /dev/null
+++ b/quickstart-flink/quickstart-flinksql/flinksql_1.16/assembly/bin/shutdown.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+#
+# 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.
+#
+# -----------------------------------------------------------------------------
+#Stop Script for the streampark-quickstart
+# -----------------------------------------------------------------------------
+#
+# Better OS/400 detection: see Bugzilla 31132
+os400=false
+# shellcheck disable=SC2006
+case "$(uname)" in
+OS400*) os400=true ;;
+esac
+
+# resolve links - $0 may be a softlink
+PRG="$0"
+
+while [[ -L "$PRG" ]]; do
+  # shellcheck disable=SC2006
+  ls=$(ls -ld "$PRG")
+  # shellcheck disable=SC2006
+  link=$(expr "$ls" : '.*-> \(.*\)$')
+  if expr "$link" : '/.*' >/dev/null; then
+    PRG="$link"
+  else
+    # shellcheck disable=SC2006
+    PRG=$(dirname "$PRG")/"$link"
+  fi
+done
+
+# shellcheck disable=SC2006
+PRGDIR=$(dirname "$PRG")
+EXECUTABLE=flink.sh
+
+# Check that target executable exists
+if ${os400}; then
+  # -x will Only work on the os400 if the files are:
+  # 1. owned by the user
+  # 2. owned by the PRIMARY group of the user
+  # this will not work if the user belongs in secondary groups
+  eval
+else
+  if [[ ! -x "$PRGDIR"/"$EXECUTABLE" ]]; then
+    echo "Cannot find $PRGDIR/$EXECUTABLE"
+    echo "The file is absent or does not have execute permission"
+    echo "This file is needed to run this program"
+    exit 1
+  fi
+fi
+
+exec "$PRGDIR"/"$EXECUTABLE" stop "$@"
diff --git a/quickstart-flink/quickstart-flinksql/flinksql_1.16/assembly/bin/startup.sh b/quickstart-flink/quickstart-flinksql/flinksql_1.16/assembly/bin/startup.sh
new file mode 100644
index 0000000..8d5cc2e
--- /dev/null
+++ b/quickstart-flink/quickstart-flinksql/flinksql_1.16/assembly/bin/startup.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+#
+# 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.
+#
+# -----------------------------------------------------------------------------
+#Start Script for the streampark-quickstart
+# -----------------------------------------------------------------------------
+#
+# Better OS/400 detection: see Bugzilla 31132
+os400=false
+# shellcheck disable=SC2006
+case "$(uname)" in
+OS400*) os400=true ;;
+esac
+
+# resolve links - $0 may be a softlink
+PRG="$0"
+
+while [[ -L "$PRG" ]]; do
+  # shellcheck disable=SC2006
+  ls=$(ls -ld "$PRG")
+  # shellcheck disable=SC2006
+  link=$(expr "$ls" : '.*-> \(.*\)$')
+  if expr "$link" : '/.*' >/dev/null; then
+    PRG="$link"
+  else
+    # shellcheck disable=SC2006
+    PRG=$(dirname "$PRG")/"$link"
+  fi
+done
+
+# shellcheck disable=SC2006
+PRGDIR=$(dirname "$PRG")
+EXECUTABLE=streampark.sh
+
+# Check that target executable exists
+if ${os400}; then
+  # -x will Only work on the os400 if the files are:
+  # 1. owned by the user
+  # 2. owned by the PRIMARY group of the user
+  # this will not work if the user belongs in secondary groups
+  eval
+else
+  if [[ ! -x "$PRGDIR"/"$EXECUTABLE" ]]; then
+    echo "Cannot find $PRGDIR/$EXECUTABLE"
+    echo "The file is absent or does not have execute permission"
+    echo "This file is needed to run this program"
+    exit 1
+  fi
+fi
+
+exec "$PRGDIR"/"$EXECUTABLE" start "$@"
diff --git a/quickstart-flink/quickstart-flinksql/flinksql_1.16/assembly/bin/streampark.sh b/quickstart-flink/quickstart-flinksql/flinksql_1.16/assembly/bin/streampark.sh
new file mode 100644
index 0000000..5eee8a5
--- /dev/null
+++ b/quickstart-flink/quickstart-flinksql/flinksql_1.16/assembly/bin/streampark.sh
@@ -0,0 +1,272 @@
+#!/bin/bash
+#
+# 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.
+#
+# -----------------------------------------------------------------------------
+#Start Script for the streampark-quickstart
+# -----------------------------------------------------------------------------
+#
+# Better OS/400 detection: see Bugzilla 31132
+
+#echo color
+WHITE_COLOR="\E[1;37m"
+RED_COLOR="\E[1;31m"
+BLUE_COLOR='\E[1;34m'
+GREEN_COLOR="\E[1;32m"
+YELLOW_COLOR="\E[1;33m"
+RES="\E[0m"
+
+echo_r() {
+  # Color red: Error, Failed
+  [[ $# -ne 1 ]] && return 1
+  # shellcheck disable=SC2059
+  printf "[${BLUE_COLOR}Flink${RES}] ${RED_COLOR}$1${RES}\n"
+}
+
+echo_g() {
+  # Color green: Success
+  [[ $# -ne 1 ]] && return 1
+  # shellcheck disable=SC2059
+  printf "[${BLUE_COLOR}Flink${RES}] ${GREEN_COLOR}$1${RES}\n"
+}
+
+echo_y() {
+  # Color yellow: Warning
+  [[ $# -ne 1 ]] && return 1
+  # shellcheck disable=SC2059
+  printf "[${BLUE_COLOR}Flink${RES}] ${YELLOW_COLOR}$1${RES}\n"
+}
+
+echo_w() {
+  # Color yellow: White
+  [[ $# -ne 1 ]] && return 1
+  # shellcheck disable=SC2059
+  printf "[${BLUE_COLOR}Flink${RES}] ${WHITE_COLOR}$1${RES}\n"
+}
+
+# OS specific support.  $var _must_ be set to either true or false.
+cygwin=false
+darwin=false
+os400=false
+hpux=false
+# shellcheck disable=SC2006
+case "$(uname)" in
+CYGWIN*) cygwin=true ;;
+Darwin*) darwin=true ;;
+OS400*) os400=true ;;
+HP-UX*) hpux=true ;;
+esac
+
+# resolve links - $0 may be a softlink
+PRG="$0"
+
+while [[ -L "$PRG" ]]; do
+  # shellcheck disable=SC2006
+  ls=$(ls -ld "$PRG")
+  # shellcheck disable=SC2006
+  link=$(expr "$ls" : '.*-> \(.*\)$')
+  if expr "$link" : '/.*' >/dev/null; then
+    PRG="$link"
+  else
+    # shellcheck disable=SC2006
+    PRG=$(dirname "$PRG")/"$link"
+  fi
+done
+
+# Get standard environment variables
+# shellcheck disable=SC2006
+PRGDIR=$(dirname "$PRG")
+
+# shellcheck disable=SC2124
+# shellcheck disable=SC2034
+RUN_ARGS="$@"
+#global variables....
+# shellcheck disable=SC2006
+# shellcheck disable=SC2164
+APP_HOME=$(
+  cd "$PRGDIR/.." >/dev/null
+  pwd
+)
+APP_BASE="$APP_HOME"
+APP_CONF="$APP_BASE"/conf
+APP_LOG="$APP_BASE"/logs
+APP_LIB="$APP_BASE"/lib
+# shellcheck disable=SC2034
+APP_BIN="$APP_BASE"/bin
+APP_TEMP="$APP_BASE"/temp
+[[ ! -d "$APP_LOG" ]] && mkdir "${APP_LOG}" >/dev/null
+[[ ! -d "$APP_TEMP" ]] && mkdir "${APP_TEMP}" >/dev/null
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if ${cygwin}; then
+  # shellcheck disable=SC2006
+  [[ -n "$APP_HOME" ]] && APP_HOME=$(cygpath --unix "$APP_HOME")
+  # shellcheck disable=SC2006
+  [[ -n "$APP_BASE" ]] && APP_BASE=$(cygpath --unix "$APP_BASE")
+fi
+
+# Ensure that neither APP_HOME nor APP_BASE contains a colon
+# as this is used as the separator in the classpath and Java provides no
+# mechanism for escaping if the same character appears in the path.
+case ${APP_HOME} in
+*:*)
+  echo "Using APP_HOME:   $APP_HOME"
+  echo "Unable to start as APP_HOME contains a colon (:) character"
+  exit 1
+  ;;
+esac
+case ${APP_BASE} in
+*:*)
+  echo "Using APP_BASE:   $APP_BASE"
+  echo "Unable to start as APP_BASE contains a colon (:) character"
+  exit 1
+  ;;
+esac
+
+# For OS400
+if ${os400}; then
+  # Set job priority to standard for interactive (interactive - 6) by using
+  # the interactive priority - 6, the helper threads that respond to requests
+  # will be running at the same priority as interactive jobs.
+  COMMAND='chgjob job('${JOBNAME}') runpty(6)'
+  system "${COMMAND}"
+  # Enable multi threading
+  export QIBM_MULTI_THREADED=Y
+fi
+
+# (0) export HADOOP_CLASSPATH
+# shellcheck disable=SC2006
+if [ x"$(hadoop classpath)" == x"" ]; then
+  echo_r " Please make sure to export the HADOOP_CLASSPATH environment variable or have hadoop in your classpath"
+else
+  # shellcheck disable=SC2155
+  export HADOOP_CLASSPATH=$(hadoop classpath)
+fi
+
+doStart() {
+  local yaml=""
+  if [[ $# -eq 0 ]]; then
+    yaml="application.yml"
+    echo_w "not input properties-file,use default application.yml"
+  else
+    #Solve the path problem, arbitrary path, ignore prefix, only take the content after conf/
+    if [ "$1" == "--conf" ]; then
+      shift
+      # shellcheck disable=SC2034
+      yaml=$(echo "$1" | awk -F 'conf/' '{print $2}')
+      shift
+    fi
+  fi
+
+  local app_proper=""
+  if [[ -f "$APP_CONF/$yaml" ]]; then
+    app_proper="$APP_CONF/$yaml"
+  fi
+
+  # flink main jar...
+  # shellcheck disable=SC2155
+  local jarfile="${APP_LIB}/$(basename "${APP_BASE}").jar"
+
+  local param_cli="org.apache.streampark.flink.core.conf.ParameterCli"
+
+  # shellcheck disable=SC2006
+  # shellcheck disable=SC2155
+  local app_name="$(java -cp "${jarfile}" $param_cli --name "${app_proper}")"
+
+  # shellcheck disable=SC2001
+  local safe_app_name="$(echo "$app_name" | sed "s/ /_/g")"
+
+  local trim="s/^[ \s]\{1,\}//g;s/[ \s]\{1,\}$//g"
+  # shellcheck disable=SC2006
+  # shellcheck disable=SC2155
+  local detached_mode="$(java -cp "${jarfile}" $param_cli --detached "$app_proper")"
+  # shellcheck disable=SC2006
+  # trim...
+  detached_mode="$(echo "$detached_mode" | sed "$trim")"
+  # shellcheck disable=SC2006
+  # shellcheck disable=SC2155
+  local option="$(java -cp "${jarfile}" $param_cli --option "$app_proper") $*"
+  # shellcheck disable=SC2006
+  option="$(echo "$option" | sed "$trim")"
+
+  # shellcheck disable=SC2006
+  # shellcheck disable=SC2155
+  local property_params="$(java -cp "${jarfile}" $param_cli --property "$app_proper")"
+  # shellcheck disable=SC2006
+  property_params="$(echo "$property_params" | sed "$trim")"
+
+  echo_g "${app_name} Starting by:<${detached_mode}> mode"
+
+  # json all params...
+  local runOption="$option"
+  if [ x"$property_params" != x"" ]; then
+    runOption="$runOption $property_params"
+  fi
+
+  local argsOption=""
+  if [ x"$app_proper" != x"" ]; then
+    argsOption="--conf $app_proper"
+  fi
+
+  if [ x"$detached_mode" == x"Detached" ]; then
+    flink run \
+    $runOption \
+    $jarfile \
+    $argsOption
+    echo "${safe_app_name}" >"${APP_TEMP}/.running"
+  else
+    # shellcheck disable=SC2006
+    # shellcheck disable=SC2155
+    local app_log_date=$(date "+%Y%m%d_%H%M%S")
+    local app_out="${APP_LOG}/${safe_app_name}-${app_log_date}.log"
+    flink run \
+    $runOption \
+    $jarfile \
+    $argsOption >> "$app_out" 2>&1 &
+    echo "${safe_app_name}" >"${APP_TEMP}/.running"
+    echo_g "${safe_app_name} starting,more detail please log:$app_out"
+  fi
+}
+
+doStop() {
+  # shellcheck disable=SC2155
+  # shellcheck disable=SC2034
+  local running_app=$(cat "${APP_TEMP/.running/}")
+  if [ x"${running_app}" != x"" ]; then
+    echo_w "can not found flink job!"
+  fi
+  flink list -r | grep "${running_app}" | awk '{print $4}' | xargs flink cancel
+}
+
+case "$1" in
+start)
+  shift
+  doStart "$@"
+  exit $?
+  ;;
+stop)
+  doStop
+  exit $?
+  ;;
+*)
+  echo_g "Unknown command: $1"
+  echo_g "commands:"
+  echo_g "  start             Start"
+  echo_g "  stop              Stop"
+  echo_g "                    are you running?"
+  exit 1
+  ;;
+esac