首页 > 解决方案 > 在 Ubuntu 18.04 EC2 上安装 Thingsboard 时出错“[main] ERROR otserver.queue.kafka.TbKafkaAdmin - 无法获取所有主题。”

问题描述

我正在尝试使用 ThingsBoard 制作物联网平台。因此,我将通过 Kafka 和 PostgreSQL 与 TimescaleDB 一起使用 ThingsBoard。我尝试使用 Thingsboard 安装说明在 Ubuntu 18.04 EC2 (AWS) 上安装 ThingsBoard 多次,但失败了。

给个详细的状态,我安装了它并收到一条消息“ThingsBoard安装成功!” 我试图打开 ThingsBoard 的 Web UI,但它没有用。我运行命令“cat /var/log/thingsboard/thingsboard.log | grep ERROR”来检查错误和“ERROR otserver.queue.kafka.TbKafkaAdmin - 无法获取所有主题”。弹出。我还检查了 Kafka 是否正常工作,所以我尝试创建一个主题,它说“经纪人不可用”。卡夫卡似乎有一个错误。

我尝试使用相同的指令在我的计算机上安装它并且它可以正常工作(Ubuntu 18.04),但我不知道为什么它不能在 EC2 上工作。我很好奇具体的问题是什么。请告知并感谢您的意见。

我按照这个顺序安装了 Kafka、PostgreSQL 和 TimescaleDB 和 Thingsboard。 https://thingsboard.io/docs/user-guide/install/ubuntu/?ubuntuThingsboardDatabase=timescale&ubuntuThingsboardQueue=kafka

## thingsboard.conf
export JAVA_OPTS="$JAVA_OPTS -Dplatform=deb -Dinstall.data_dir=/usr/share/thingsboard/data"
export JAVA_OPTS="$JAVA_OPTS -Xloggc:/var/log/thingsboard/gc.log -XX:+IgnoreUnrecognizedVMOptions -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
export JAVA_OPTS="$JAVA_OPTS -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10"
export JAVA_OPTS="$JAVA_OPTS -XX:GCLogFileSize=10M -XX:-UseBiasedLocking -XX:+UseTLAB -XX:+ResizeTLAB -XX:+PerfDisableSharedMem -XX:+UseCondCardMark"
export JAVA_OPTS="$JAVA_OPTS -XX:CMSWaitDuration=10000 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+CMSParallelInitialMarkEnabled"
export JAVA_OPTS="$JAVA_OPTS -XX:+CMSEdenChunksRecordAlways -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly"
export LOG_FILENAME=thingsboard.out
export LOADER_PATH=/usr/share/thingsboard/conf,/usr/share/thingsboard/extensions
export SQL_DATA_FOLDER=/usr/share/thingsboard/data/sql

# DB Configuration 
export DATABASE_ENTITIES_TYPE=sql
export DATABASE_TS_TYPE=timescale
export SPRING_JPA_DATABASE_PLATFORM=org.hibernate.dialect.PostgreSQLDialect
export SPRING_DRIVER_CLASS_NAME=org.postgresql.Driver
export SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/thingsboard
export SPRING_DATASOURCE_USERNAME=postgres
export SPRING_DATASOURCE_PASSWORD=12345
export SPRING_DATASOURCE_MAXIMUM_POOL_SIZE=5
# Specify Interval size for data chunks storage. Please note that this value can be set only once.
export SQL_TIMESCALE_CHUNK_TIME_INTERVAL=604800000
# Number of miliseconds. The current value corresponds to one week.

export TB_QUEUE_TYPE=kafka
export TB_KAFKA_SERVERS=localhost:9092

# Update ThingsBoard memory usage and restrict it to 256MB in /etc/thingsboard/conf/thingsboard.conf
export JAVA_OPTS="$JAVA_OPTS -Xms256M -Xmx256M"

动物园管理员服务

[Unit]
Description=Apache Zookeeper server
Documentation=http://zookeeper.apache.org/
Requires=network.target remote-fs.target
After=network.target remote-fs.target

[Service]
Type=simple
ExecStart=/usr/local/kafka/bin/zookeeper-server-start.sh /usr/local/kafka/config/zookeeper.properties
ExecStop=/usr/local/kafka/bin/zookeeper-server-stop.sh
Restart=on-abnormal

[Install]
WantedBy=multi-user.target

卡夫卡服务

[Unit]
Description=Apache Kafka Server
Documentation=http://kafka.apache.org/documentation.html
Requires=zookeeper.service

[Service]
Type=simple
Environment="JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64"
ExecStart=/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties
ExecStop=/usr/local/kafka/bin/kafka-server-stop.sh

[Install]
WantedBy=multi-user.target

标签: apache-kafkathingsboard

解决方案


感谢两个建议我的人,我解决了这个问题。基本上这只是 Kafka 无法正常工作的原因,因为 EC2 免费层实例没有足够的内存来在同一台机器上同时运行 Kafka 客户端和代理。

我又为 Kafka 制作了一个实例并尝试运行 Kafka。它说

failed; error='Cannot allocate memory' (errno=12)
There is insufficient memory for the Java Runtime Environment to continue.

所以我检查了 err.log 文件,它使用了将近 1GB 的内存。

因此,如果您尝试在 Ubuntu EC2 免费层实例上使用 Kafka 使用 Thingsboard,您将不得不为 Kafka 创建另一个实例。并且不要忘记将 kafka 引导服务器更改为运行 Kafka 的 EC2 的 IP


推荐阅读