如何部署Oracle Linux 10.x CMAK?

Apache-Hadoop

1 基础知识

如何二进制部署CMAK?

2 最佳实践

2.1 软件环境

2.1.1 Kafka集群环境

如果你尚未部署Kafka集群环境,请参阅如下链接,

如何部署Oracle Linux 10.x Apache Kafka 3.0.0集群?

2.1.2 部署JDK环境

请参阅以下方法安装openJDK 11以上版本,
https://www.cmdschool.org/archives/13105
由于本章不设置环境变量,你可以使用如下命令检查JDK的安装,

/usr/java/jdk-11.0.2/bin/java -version

命令显示如下,

openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)

2.2 安装前的准备

2.2.1 下载软件包

cd ~
wget https://github.com/yahoo/CMAK/releases/download/3.0.0.5/cmak-3.0.0.5.zip

如果需要其他版本,请从以下链接下载,
https://github.com/yahoo/CMAK/releases

2.2.2 解压软件包

cd ~
unzip cmak-3.0.0.5.zip

2.2 部署软件包

2.2.1 配置运行用户

groupadd cmak
useradd -g cmak -d /var/lib/cmak cmak

2.2.2 部署软件包到目录

cd ~
mv cmak-3.0.0.5 /usr/
chown cmak:cmak -R /usr/cmak-3.0.0.5/
chmod 775 -R /usr/cmak-3.0.0.5/
ln -s /usr/cmak-3.0.0.5/conf/ /etc/cmak
ln -s /usr/cmak-3.0.0.5/logs/ /var/log/cmak
mkdir /var/run/cmak
chown cmak:cmak /var/run/cmak

2.2.3 配置环境变量

vim /etc/profile.d/cmak.sh

输入如下配置,

export CMAK_HOME=/usr/cmak-3.0.0.5
export PATH=${CMAK_HOME}/bin:$PATH

配置完成后,可使用如下命令导入环境变量,

source /etc/profile

然后可以使用如下命令检查环境变量的配置,

cmak -h

可见如下显示,

Usage:  [options]

  -h | -help         print this message
  -v | -verbose      this runner is chattier
  -d | -debug        enable debug output for the launcher script
  -no-version-check  Don't run the java version check.
  -main   Define a custom main class
  -jvm-debug   Turn on JVM debugging, open at the given port.

  # java version (default: java from PATH, currently java version "1.8.0_121")
  -java-home          alternate JAVA_HOME

  # jvm options and output control
  JAVA_OPTS          environment variable, if unset uses ""
  -Dkey=val          pass -Dkey=val directly to the java runtime
  -J-X               pass option -X directly to the java runtime
                     (-J is stripped)

  # special option
  --                 To stop parsing built-in commands from the rest of the command-line.
                     e.g.) enabling debug and sending -d as app argument
                     $ ./start-script -d -- -d

In the case of duplicated or conflicting options, basically the order above
shows precedence: JAVA_OPTS lowest, command line options highest except "--".
Available main classes:
        kafka.manager.utils.one10.LogConfig
        kafka.manager.utils.two00.LogConfig
        kafka.manager.utils.two40.LogConfig
        kafka.manager.utils.zero10.LogConfig
        kafka.manager.utils.zero11.LogConfig
        kafka.manager.utils.zero90.LogConfig

2.3 配置软件包

2.3.1 修改配置文件

cp /etc/cmak/application.conf /etc/cmak/application.conf.default
vim /etc/cmak/application.conf

修改如下参数,

kafka-manager.zkhosts="hd01.cmdschool.org:2181,hd02.cmdschool.org:2181,hd03.cmdschool.org:2181"
#kafka-manager.zkhosts=${?ZK_HOSTS}
cmak.zkhosts="hd01.cmdschool.org:2181,hd02.cmdschool.org:2181,hd03.cmdschool.org:2181"
#cmak.zkhosts=${?ZK_HOSTS}
http.port = 8080
pidfile.path = "/var/run/cmak/cmak.pid"

2.3.2 测试服务运行

su - cmak -c 'JAVA_HOME=/usr/java/jdk-11.0.2;cd /usr/cmak-3.0.0.5/;/usr/cmak-3.0.0.5/bin/cmak -Dconfig.file=/etc/cmak/application.conf'

如果看到如下信息,则启动成功,

#...
2026-03-19 10:32:49,633 - [INFO] k.m.a.KafkaManagerActor - Updating internal state...
2026-03-19 10:32:49,686 - [INFO] p.c.s.AkkaHttpServer - Listening for HTTP on /0:0:0:0:0:0:0:0:8080
#...

看到以上提示后,如果需要结束程序请按下【CTRL+C】即可结束程序,如果需要排错,可以使用如下命令查看日志文件,

tail -f /var/log/cmak/application.log

然后,如果你需要查看启动的进程,请使用如下命令,

pgrep  -u cmak java -a

可见如下显示,

216103 /usr/java/jdk-11.0.2/bin/java -Duser.dir=/usr/cmak-3.0.0.5 -Dconfig.file=/etc/cmak/application.conf -Dhttp.port=8080 -cp /usr/cmak-3.0.0.5/lib/../conf/:/usr/cmak-3.0.0.5/lib/cmak.cmak-3.0.0.5-sans-externalized.jar:/usr/cmak-3.0.0.5/lib/org.apache.commons.commons-lang3-3.6.jar:/usr/cmak-3.0.0.5/lib/javax.inject.javax.inject-1.jar:/usr/cmak-3.0.0.5/lib/io.netty.netty-common-4.1.42.Final.jar:/usr/cmak-3.0.0.5/lib/com.fasterxml.jackson.core.jackson-core-2.10.0.jar:/usr/cmak-3.0.0.5/lib/com.fasterxml.jackson.datatype.jackson-datatype-jsr310-2.8.11.jar:/usr/cmak-3.0.0.5/lib/org.scalaz.scalaz-core_2.12-7.2.27.jar:/usr/cmak-3.0.0.5/lib/com.typesafe.play.play_2.12-2.6.21.jar:/usr/cmak-3.0.0.5/lib/io.netty.netty-buffer-4.1.42.Final.jar:/usr/cmak-3.0.0.5/lib/com.yammer.metrics.metrics-core-2.2.0.jar:/usr/cmak-3.0.0.5/lib/com.fasterxml.jackson.datatype.jackson-datatype-jdk8-2.10.0.jar:/usr/cmak-3.0.0.5/lib/org.webjars.requirejs-2.3.5.jar:/usr/cmak-3.0.0.5/lib/org.apache.curator.curator-client-2.12.0.jar:/usr/cmak-3.0.0.5/lib/io.netty.netty-handler-4.1.42.Final.jar:/usr/cmak-3.0.0.5/lib/com.typesafe.play.play-functional_2.12-2.6.12.jar:/usr/cmak-3.0.0.5/lib/commons-codec.commons-codec-1.11.jar:/usr/cmak-3.0.0.5/lib/com.beachape.enumeratum-macros_2.12-1.5.9.jar:/usr/cmak-3.0.0.5/lib/javax.transaction.jta-1.1.jar:/usr/cmak-3.0.0.5/lib/org.webjars.popper.js-1.14.3.jar:/usr/cmak-3.0.0.5/lib/org.json4s.json4s-scalap_2.12-3.6.5.jar:/usr/cmak-3.0.0.5/lib/io.netty.netty-resolver-4.1.42.Final.jar:/usr/cmak-3.0.0.5/lib/com.typesafe.play.play-server_2.12-2.6.21.jar:/usr/cmak-3.0.0.5/lib/org.apache.kafka.connect-json-2.2.0.jar:/usr/cmak-3.0.0.5/lib/org.slf4j.jul-to-slf4j-1.7.25.jar:/usr/cmak-3.0.0.5/lib/org.typelevel.macro-compat_2.12-1.1.1.jar:/usr/cmak-3.0.0.5/lib/org.reactivestreams.reactive-streams-1.0.2.jar:/usr/cmak-3.0.0.5/lib/com.typesafe.play.filters-helpers_2.12-2.6.21.jar:/usr/cmak-3.0.0.5/lib/com.fasterxml.jackson.core.jackson-annotations-2.10.0.jar:/usr/cmak-3.0.0.5/lib/ch.qos.logback.logback-classic-1.2.3.jar:/usr/cmak-3.0.0.5/lib/com.typesafe.play.play-streams_2.12-2.6.21.jar:/usr/cmak-3.0.0.5/lib/org.rocksdb.rocksdbjni-5.15.10.jar:/usr/cmak-3.0.0.5/lib/org.apache.zookeeper.zookeeper-jute-3.5.6.jar:/usr/cmak-3.0.0.5/lib/org.webjars.webjars-play_2.12-2.6.3.jar:/usr/cmak-3.0.0.5/lib/javax.activation.javax.activation-api-1.2.0.jar:/usr/cmak-3.0.0.5/lib/com.google.code.findbugs.jsr305-3.0.2.jar:/usr/cmak-3.0.0.5/lib/org.slf4j.jcl-over-slf4j-1.7.25.jar:/usr/cmak-3.0.0.5/lib/joda-time.joda-time-2.9.9.jar:/usr/cmak-3.0.0.5/lib/io.netty.netty-transport-4.1.42.Final.jar:/usr/cmak-3.0.0.5/lib/com.typesafe.play.build-link-2.6.21.jar:/usr/cmak-3.0.0.5/lib/org.apache.zookeeper.zookeeper-3.5.6.jar:/usr/cmak-3.0.0.5/lib/org.apache.curator.curator-recipes-2.12.0.jar:/usr/cmak-3.0.0.5/lib/org.scala-lang.modules.scala-parser-combinators_2.12-1.1.1.jar:/usr/cmak-3.0.0.5/lib/io.netty.netty-codec-4.1.42.Final.jar:/usr/cmak-3.0.0.5/lib/org.lz4.lz4-java-1.6.0.jar:/usr/cmak-3.0.0.5/lib/org.json4s.json4s-scalaz_2.12-3.6.5.jar:/usr/cmak-3.0.0.5/lib/com.typesafe.play.play-logback_2.12-2.6.21.jar:/usr/cmak-3.0.0.5/lib/org.apache.kafka.kafka-streams-2.2.0.jar:/usr/cmak-3.0.0.5/lib/com.google.guava.guava-23.6.1-jre.jar:/usr/cmak-3.0.0.5/lib/org.scala-lang.scala-reflect-2.12.10.jar:/usr/cmak-3.0.0.5/lib/org.webjars.bootstrap-4.3.1.jar:/usr/cmak-3.0.0.5/lib/com.typesafe.akka.akka-slf4j_2.12-2.5.19.jar:/usr/cmak-3.0.0.5/lib/com.typesafe.play.play-json_2.12-2.6.12.jar:/usr/cmak-3.0.0.5/lib/com.typesafe.play.play-netty-utils-2.6.21.jar:/usr/cmak-3.0.0.5/lib/com.google.j2objc.j2objc-annotations-1.1.jar:/usr/cmak-3.0.0.5/lib/com.typesafe.akka.akka-http-core_2.12-10.0.15.jar:/usr/cmak-3.0.0.5/lib/org.webjars.json-20121008-1.jar:/usr/cmak-3.0.0.5/lib/org.json4s.json4s-ast_2.12-3.6.5.jar:/usr/cmak-3.0.0.5/lib/com.beachape.enumeratum_2.12-1.5.13.jar:/usr/cmak-3.0.0.5/lib/org.clapper.grizzled-slf4j_2.12-1.3.3.jar:/usr/cmak-3.0.0.5/lib/io.netty.netty-transport-native-unix-common-4.1.42.Final.jar:/usr/cmak-3.0.0.5/lib/org.scala-lang.modules.scala-collection-compat_2.12-2.1.2.jar:/usr/cmak-3.0.0.5/lib/com.google.errorprone.error_prone_annotations-2.1.3.jar:/usr/cmak-3.0.0.5/lib/org.webjars.dustjs-linkedin-2.7.2.jar:/usr/cmak-3.0.0.5/lib/com.fasterxml.jackson.module.jackson-module-scala_2.12-2.10.0.jar:/usr/cmak-3.0.0.5/lib/commons-cli.commons-cli-1.4.jar:/usr/cmak-3.0.0.5/lib/com.typesafe.play.play-exceptions-2.6.21.jar:/usr/cmak-3.0.0.5/lib/com.github.ben-manes.caffeine.caffeine-2.6.2.jar:/usr/cmak-3.0.0.5/lib/org.webjars.octicons-4.3.0.jar:/usr/cmak-3.0.0.5/lib/com.fasterxml.jackson.dataformat.jackson-dataformat-csv-2.10.0.jar:/usr/cmak-3.0.0.5/lib/org.webjars.underscorejs-1.9.0.jar:/usr/cmak-3.0.0.5/lib/com.adrianhurt.play-bootstrap-core_2.12-1.4-P26.jar:/usr/cmak-3.0.0.5/lib/org.codehaus.mojo.animal-sniffer-annotations-1.14.jar:/usr/cmak-3.0.0.5/lib/org.xerial.snappy.snappy-java-1.1.7.3.jar:/usr/cmak-3.0.0.5/lib/com.fasterxml.jackson.module.jackson-module-paranamer-2.10.0.jar:/usr/cmak-3.0.0.5/lib/org.checkerframework.checker-compat-qual-2.0.0.jar:/usr/cmak-3.0.0.5/lib/org.apache.kafka.connect-api-2.2.0.jar:/usr/cmak-3.0.0.5/lib/com.typesafe.akka.akka-protobuf_2.12-2.5.19.jar:/usr/cmak-3.0.0.5/lib/com.typesafe.play.twirl-api_2.12-1.3.15.jar:/usr/cmak-3.0.0.5/lib/org.apache.yetus.audience-annotations-0.5.0.jar:/usr/cmak-3.0.0.5/lib/org.slf4j.slf4j-api-1.7.28.jar:/usr/cmak-3.0.0.5/lib/com.typesafe.config-1.3.3.jar:/usr/cmak-3.0.0.5/lib/org.slf4j.log4j-over-slf4j-1.7.25.jar:/usr/cmak-3.0.0.5/lib/org.scala-lang.modules.scala-xml_2.12-1.0.6.jar:/usr/cmak-3.0.0.5/lib/org.json4s.json4s-core_2.12-3.6.5.jar:/usr/cmak-3.0.0.5/lib/org.apache.commons.commons-compress-1.9.jar:/usr/cmak-3.0.0.5/lib/com.typesafe.ssl-config-core_2.12-0.3.6.jar:/usr/cmak-3.0.0.5/lib/com.github.luben.zstd-jni-1.4.3-1.jar:/usr/cmak-3.0.0.5/lib/org.apache.curator.curator-framework-2.12.0.jar:/usr/cmak-3.0.0.5/lib/org.webjars.webjars-locator-0.32-1.jar:/usr/cmak-3.0.0.5/lib/com.typesafe.akka.akka-stream_2.12-2.5.19.jar:/usr/cmak-3.0.0.5/lib/org.scala-lang.modules.scala-java8-compat_2.12-0.9.0.jar:/usr/cmak-3.0.0.5/lib/org.apache.kafka.kafka-clients-2.4.0.jar:/usr/cmak-3.0.0.5/lib/com.thoughtworks.paranamer.paranamer-2.8.jar:/usr/cmak-3.0.0.5/lib/org.json4s.json4s-jackson_2.12-3.6.5.jar:/usr/cmak-3.0.0.5/lib/com.typesafe.akka.akka-parsing_2.12-10.0.15.jar:/usr/cmak-3.0.0.5/lib/org.apache.kafka.kafka_2.12-2.4.0.jar:/usr/cmak-3.0.0.5/lib/org.webjars.jquery-3.3.1-2.jar:/usr/cmak-3.0.0.5/lib/javax.xml.bind.jaxb-api-2.3.1.jar:/usr/cmak-3.0.0.5/lib/org.webjars.backbonejs-1.3.3.jar:/usr/cmak-3.0.0.5/lib/io.netty.netty-transport-native-epoll-4.1.42.Final.jar:/usr/cmak-3.0.0.5/lib/net.sf.jopt-simple.jopt-simple-5.0.4.jar:/usr/cmak-3.0.0.5/lib/com.typesafe.scala-logging.scala-logging_2.12-3.9.2.jar:/usr/cmak-3.0.0.5/lib/com.adrianhurt.play-bootstrap_2.12-1.4-P26-B4.jar:/usr/cmak-3.0.0.5/lib/com.typesafe.play.play-akka-http-server_2.12-2.6.21.jar:/usr/cmak-3.0.0.5/lib/com.unboundid.unboundid-ldapsdk-4.0.9.jar:/usr/cmak-3.0.0.5/lib/ch.qos.logback.logback-core-1.2.3.jar:/usr/cmak-3.0.0.5/lib/org.webjars.webjars-locator-core-0.35.jar:/usr/cmak-3.0.0.5/lib/io.jsonwebtoken.jjwt-0.7.0.jar:/usr/cmak-3.0.0.5/lib/org.scala-lang.scala-library-2.12.10.jar:/usr/cmak-3.0.0.5/lib/com.typesafe.akka.akka-actor_2.12-2.5.19.jar:/usr/cmak-3.0.0.5/lib/com.fasterxml.jackson.core.jackson-databind-2.10.0.jar:/usr/cmak-3.0.0.5/lib/cmak.cmak-3.0.0.5-assets.jar play.core.server.ProdServerStart

可使用如下命令查看倾听的端口,

ss -antp | grep -f<(pgrep  -u cmak java)

可见如下显示,

LISTEN    0      100                         *:8080                       *:*     users:(("java",pid=216103,fd=128))                                       
ESTAB     0      0      [::ffff:10.168.0.101]:59706 [::ffff:10.168.0.103]:2181  users:(("java",pid=216103,fd=123))  

根据以上端口需要,你可能需要执行命令添加如下端口,

firewall-cmd --permanent --add-port 8080/tcp
firewall-cmd --reload
firewall-cmd --list-all

2.3.3 配置服务启动

vim /etc/systemd/system/cmak.service

加入如下脚本,

[Unit]
Description=CMAK Service
After=syslog.target network.target

[Service]
Type=simple
User=cmak
Group=cmak

Environment="JAVA_HOME=/usr/java/jdk-11.0.2"

WorkingDirectory=/usr/cmak-3.0.0.5
ExecStartPre=+/usr/bin/sh -c 'mkdir -p /var/run/cmak;chown cmak:cmak /var/run/cmak;chmod 775 /var/run/cmak'
ExecStart=/usr/cmak-3.0.0.5/bin/cmak -Dconfig.file=/etc/cmak/application.conf
ExecStop=/usr/bin/kill -SIGINT $MAINPID
PIDFile=/var/run/cmak/cmak.pid
Restart=on-success
RestartSec=5

[Install]
WantedBy=multi-user.target

保存配置后,你需要重载服务使配置生效,

systemctl daemon-reload

然后,请使用如下命令启动服务并设置自启动,

systemctl start cmak.service
systemctl status cmak.service
systemctl enable cmak.service

2.3.4 登录管理页面

http://cmak.cmdschool.org:8080
由于界面配置相对简单,详细的配置请自行摸索,本章不再详述,另外如下错误需要注意,

如何解决cmak添加集群报错?

没有评论

发表回复

Apache-Hadoop
如何解决cmak添加集群报错?

1 前言 一个问题,一篇文章,一出故事。 今天在cmak中添加集群(Add Cluster)出现如下 …

Apache-Hadoop
如何解决Apache Kafka启动异常问题?

1 前言 一个问题,一篇文章,一出故事。 今天安装Apache Kafka,不慎给了已经使用的bro …

Apache-Hadoop
如何部署Oracle Linux 10.x Apache Kafka 3.0.0集群?

1 基础知识 如何配置独立的Kafka集群? 2 最佳实践 2.1 配置Zookeeper集群 In …