【RocketMQ 系列三】RocketMQ集群搭建(2m-2s-sync)

2023-10-16 08:45

本文主要是介绍【RocketMQ 系列三】RocketMQ集群搭建(2m-2s-sync),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦
💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通
😁 2. 毕业设计专栏,毕业季咱们不慌忙,几百款毕业设计等你选。
❤️ 3. Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当 。python爬虫入门进阶
❤️ 4. Ceph实战,从原理到实战应有尽有。 Ceph实战
❤️ 5. Java高并发编程入门,打卡学习Java高并发。 Java高并发编程入门

文章目录

    • 一、集群特点
    • 二、服务器环境
      • 1.1.部署架构
      • 1.2.服务器信息
      • 1.3.配置Host (两台服务器都需要)
      • 1.4. 安装jdk(两台服务器都需要)
      • 1.5. 关闭防火墙(两台服务器都需要)
      • 1.6. 创建数据存储目录(两台服务器都需要)
    • 三、下载与安装配置
      • 2.1.下载rocketmq并解压(两天服务器都要)
      • 2.2. 环境变量配置(两台服务器都需要)
      • 2.3. 配置 rocketmq broker-a (在Master1上操作)
      • 2.4. 配置 rocketmq broker-b-s (在Slave2上配置)
      • 2.5. 配置 rocketmq broker-b.properties(在Master2上操作)
      • 2.6. 配置rocketmq broker-a-s.properties(在Slave1上操作)
      • 2.7. 测试环境JVM配置(两台机器都要执行)
      • 2.8. 生产环境JVM配置
    • 四、启动集群
      • 3.1.启动nameserver((两台机器上都执行)
      • 3.2.启动broker
      • 3.3.测试集群生产消费情况
      • 3.5. 关闭命令
    • 五、问题总结
    • 六、安装管理面板

一、集群特点

image-20230924162430614

  1. NameServer是一个几乎无状态的节点,可集群部署,节点之间不会互相通信。
  2. Broker部署相对比较复杂,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master。Master与Slave可以通过指定相同的BrokerName,不同的BrokerId来区分,BrokerId为0表示Master,BrokerId大于0表示Slave。
  3. Producer与NameServer集群中的其中一个节点(随机选择)建立长链接,定期从NameServer取Topic路由信息,并向Topic服务的Master建立长链接(也就是说根据Topic的路由信息找到向哪个Broker发送消息),且定时向Master发送心跳,Producer完全无状态,可集群部署。
  4. Consumer与NameServer集群中的其中一个节点(随机选择)建立长链接,定期从NameServer取Topic路由信息,并向Topic服务的Master,Slave建立长链接,且定时向Master,Slave发送心跳,Consumer既可以从Master订阅消息,也可以从Slave订阅消息,订阅关系由Broker配置决定。

二、服务器环境

1.1.部署架构

使用的模式是 2m-2s-sync,双主双从,同步复制

1.2.服务器信息

IP角色架构模式
192.31.186.198nameserver,brokermaster1,slave2
192.31.184.89nameserver,brokermaster2,slave1

1.3.配置Host (两台服务器都需要)

  1. nameserver机器信息

    #nameserver
    172.31.186.180 rocketmq-nameserver1
    172.31.184.89  rocketmq-nameserver2
    #broker 机器信息
    172.31.186.180  rocketmq-master1
    172.31.186.180  rocketmq-slave2
    172.31.184.89  rocketmq-master2
    172.31.184.89  rocketmq-slave1
    

    配置完成之后,重启网卡。

    systemctl restart network
    

1.4. 安装jdk(两台服务器都需要)

安装jdk-8u192-linux-x64.rpm,此处省略。

1.5. 关闭防火墙(两台服务器都需要)

首先查看防火墙的状态,如果状态是 active 则表示防火墙开启

$ systemctl status firewalld

关闭防火墙

$ systemctl stop firewalld

1.6. 创建数据存储目录(两台服务器都需要)

  1. 创建master节点的存储路径
mkdir -p /data/server/feige/rocketmq/store
mkdir -p /data/server/feige/rocketmq/store/commitlog
mkdir -p /data/server/feige/rocketmq/store/consumequeue
mkdir -p /data/server/feige/rocketmq/store/index
  1. 创建slave节点的存储路径

    mkdir -p /data/server/feige/rocketmq/store-s
    mkdir -p /data/server/feige/rocketmq/store-s/commitlog
    mkdir -p /data/server/feige/rocketmq/store-s/consumequeue
    mkdir -p /data/server/feige/rocketmq/store-s/index
    

三、下载与安装配置

2.1.下载rocketmq并解压(两天服务器都要)

cd /data/server/feige
wget https://archive.apache.org/dist/rocketmq/5.1.3/rocketmq-all-5.1.3-bin-release.zip
unzip rocketmq-all-5.1.3-bin-release.zip -d /data/server/feige/rocketmq
cd /data/server/feige/rocketmq/rocketmq-all-5.1.3-bin-release

2.2. 环境变量配置(两台服务器都需要)

vim /etc/profile

在profile文件的末尾加入如下命令:

ROCKETMQ_HOME=/data/server/feige/rocketmq/rocketmq-all-5.1.3-bin-release
PATH=$PATH:$ROCKETMQ_HOME/bin
export ROCKETMQ_HOME PATH

​ 执行 source /etc/profile 使文件生效

2.3. 配置 rocketmq broker-a (在Master1上操作)

vim conf/2m-2s-sync/broker-a.properties

在此配置文件中添加,master默认的端口是10911。

#所属集群名称
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样;主从节点一样,也就是这个值区分broker组的;
brokerName=broker-a
#主从标识:0 表示Master, >0 表示Slave;同一个组中区分主从的标识,只能有一个主;
brokerId=0
#当前broker监听的IP
brokerIP1=172.31.186.180
#用于HA主从同步
brokerIP2=172.31.186.180
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在发消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许Broker自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
haListenPort=10912
#删除长期无用文件时间点,默认凌晨4点
deleteWhen=04
#文件保留时间(h),默认48小时
fileReservedTime=48
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#检测物理文件磁盘空间使用率
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/data/server/feige/rocketmq/store
#commitLog存储路径
storePathCommitLog=/data/server/feige/rocketmq/store/commitlog
#消费队列存储路径
storePathConsumeQueue=/data/server/feige/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/data/server/feige/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckPoint=/data/server/feige/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/data/server/feige/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#broker角色
#- ASYNC_MASTER    异步复制Master
#- SYNC_MASTER     同步双写Master
#- SLAVE    从节点
brokerRole=SYNC_MASTER
#刷盘策略
#- ASYNC_FLUSH    异步刷盘
#- SYNC_FLUSH     同步刷盘
flushDiskType=ASYNC_FLUSH

2.4. 配置 rocketmq broker-b-s (在Slave2上配置)

这里为了避免与master的端口冲突,将slave的默认端口改成11011,另外还需要将从节点broker的存储路径改下,不能与master节点共用。

#所属集群名称
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#主从标识:0 表示Master, >0 表示Slave
brokerId=1
#当前broker监听的IP
brokerIP1=172.31.186.180
#用于HA主从同步
brokerIP2=172.31.186.180
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在发消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许Broker自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=11011
haListenPort=11012
#删除长期无用文件时间点,默认凌晨4点
deleteWhen=04
#文件保留时间(h),默认48小时
fileReservedTime=48
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/data/server/feige/rocketmq/store-s
#commitLog存储路径
storePathCommitLog=/data/server/feige/rocketmq/store-s/commitlog
#消费队列存储路径
storePathConsumeQueue=/data/server/feige/rocketmq/store-s/consumequeue
#消息索引存储路径
storePathIndex=/data/server/feige/rocketmq/store-s/index
#checkpoint 文件存储路径
storeCheckPoint=/data/server/feige/rocketmq/store-s/checkpoint
#abort 文件存储路径
abortFile=/data/server/feige/rocketmq/store-s/abort
#限制的消息大小
maxMessageSize=65536
#broker角色
#- ASYNC_MASTER    异步复制Master
#- SYNC_MASTER     同步双写Master
#- SLAVE    从节点
brokerRole=SLAVE
#刷盘策略
#- ASYNC_FLUSH    异步刷盘
#- SYNC_FLUSH     同步刷盘
flushDiskType=ASYNC_FLUSH

2.5. 配置 rocketmq broker-b.properties(在Master2上操作)

执行

vim conf/2m-2s-sync/broker-b.properties

在此配置文件中添加:master默认的端口是10911。

#所属集群名称
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#主从标识:0 表示Master, >0 表示Slave
brokerId=0
#当前broker监听的IP
brokerIP1=172.31.184.89
#用于HA主从同步
brokerIP2=172.31.184.89
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在发消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许Broker自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
haListenPort=10912
#删除长期无用文件时间点,默认凌晨4点
deleteWhen=04
#文件保留时间(h),默认48小时
fileReservedTime=48
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/data/server/feige/rocketmq/store
#commitLog存储路径
storePathCommitLog=/data/server/feige/rocketmq/store/commitlog
#消费队列存储路径
storePathConsumeQueue=/data/server/feige/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/data/server/feige/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckPoint=/data/server/feige/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/data/server/feige/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#broker角色
#- ASYNC_MASTER    异步复制Master
#- SYNC_MASTER     同步双写Master
#- SLAVE    从节点
brokerRole=SYNC_MASTER
#刷盘策略
#- ASYNC_FLUSH    异步刷盘
#- SYNC_FLUSH     同步刷盘
flushDiskType=ASYNC_FLUSH

2.6. 配置rocketmq broker-a-s.properties(在Slave1上操作)

vim conf/2m-2s-sync/broker-a-s.properties

在此配置文件中添加:将slave的默认端口改成11011。这里从节点的存储路径要与主节点区分,主和从都必须有

#所属集群名称
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#主从标识:0 表示Master, >0 表示Slave
brokerId=1
#当前broker监听的IP
brokerIP1=172.31.184.89
#用于HA主从同步
brokerIP2=172.31.184.89
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在发消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许Broker自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=11011
haListenPort=11012
#删除长期无用文件时间点,默认凌晨4点
deleteWhen=04
#文件保留时间(h),默认48小时
fileReservedTime=48
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/data/server/feige/rocketmq/store-s
#commitLog存储路径
storePathCommitLog=/data/server/feige/rocketmq/store-s/commitlog
#消费队列存储路径
storePathConsumeQueue=/data/server/feige/rocketmq/store-s/consumequeue
#消息索引存储路径
storePathIndex=/data/server/feige/rocketmq/store-s/index
#checkpoint 文件存储路径
storeCheckPoint=/data/server/feige/rocketmq/store-s/checkpoint
#abort 文件存储路径
abortFile=/data/server/feige/rocketmq/store-s/abort
#限制的消息大小
maxMessageSize=65536
#broker角色
#- ASYNC_MASTER    异步复制Master
#- SYNC_MASTER     同步双写Master
#- SLAVE    从节点
brokerRole=SLAVE
#刷盘策略
#- ASYNC_FLUSH    异步刷盘
#- SYNC_FLUSH     同步刷盘
flushDiskType=ASYNC_FLUSH

2.7. 测试环境JVM配置(两台机器都要执行)

RocketMQ默认占用的内存是8G,比较大,这里需要修改下占用的堆内存,不然在一个机器是上同时启动两个 broker可能会启动失败。

vim bin/runbroker.sh
# 根据机器实际内存调整,这里演示的机器内存比较小,配置的值比较小
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn128m"vim bin/runserver.sh
# 根据机器实际内存调整,这里演示的机器内存比较小,配置的值比较小
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"vim bin/tools.sh
# 根据机器实际内存调整,这里演示的机器内存比较小,配置的值比较小
JAVA_OPT="${JAVA_OPT} -server -Xms128m -Xmx128m -Xmn256m -XX:PermSize=128m -XX:MaxPermSize=128m"

2.8. 生产环境JVM配置

 vim bin/runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"vim bin/runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"vim bin/tools.sh
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn256m -XX:PermSize=128m -XX:MaxPermSize=128m"

四、启动集群

3.1.启动nameserver((两台机器上都执行)

nohup sh bin/mqnamesrv > /data/server/feige/rocketmq/logs/mqnamesrv.log 2>&1 &

3.2.启动broker

在192.31.186.180上执行如下命令

#1.启动Master1,在Master1上操作
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a.properties > /data/server/feige/rocketmq/logs/broker-a.log 2>&1 &
#2.启动Slave2,在Slave 2上操作
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b-s.properties > /data/server/feige/rocketmq/logs/broker-b-s.log 2>&1 &
#6、查看 NameServer(9876)和 Broker(10909、10911、10912)启动情况,在2台主机上操作
netstat -nltup|egrep "9876|10911|10912|11011|11012"

image-20230921110217969

在192.31.184.89上执行如下命令:

#1.启动Master2,在Master2上操作
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b.properties > /data/server/feige/rocketmq/logs/broker-b.log 2>&1 &#2.启动Slave1,在Slave1上操作
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a-s.properties > /data/server/feige/rocketmq/logs/broker-a-s.log 2>&1 &#6、查看 NameServer(9876)和 Broker(10909、10911、10912)启动情况,在2台主机上操作
netstat -nltup|egrep "9876|10911|10912|11011|11012"
或者
sh bin/mqadmin clusterList -n "172.31.184.89:9876;172.31.186.180:9876"
或者
jps

3.3.测试集群生产消费情况

#在2台主机上操作
vim /etc/profile
#在文件/etc/profile中追加
export NAMESRV_ADDR="rocketmq-nameserver1:9876;rocketmq-nameserver2:9876"
#在控制台在其中1台机器上操作,启动一个生产者,在1个消费者机器就可以看到消费信息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
#在控制台其中2台机器上操作,启动2个消费者
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer

这里的NAMESRV_ADDR变量名不能做任何修改,不然就可能报连不上Nameserver的错误。

i讯飞图片_1695298575007

正常消费成功的话,则消费者出现如下日志:

image-20230922124659669

3.5. 关闭命令

#关闭broker命令:
sh bin/mqshutdown broker
#关闭namesrv命令:
sh bin/mqshutdown namesrv

五、问题总结

java.lang.RuntimeException: Lock failed,MQ already startedat org.apache.rocketmq.store.DefaultMessageStore.start(DefaultMessageStore.java:214)at org.apache.rocketmq.broker.BrokerController.start(BrokerController.java:827)at org.apache.rocketmq.broker.BrokerStartup.start(BrokerStartup.java:64)at org.apache.rocketmq.broker.BrokerStartup.main(BrokerStartup.java:58)
  1. 检查master节点和slave节点的端口是否冲突
  2. 检查master节点和slave节点的broker的存储路径是否冲突

六、安装管理面板

官网提供了两种部署方式,docker部署和源码部署,由于前面我们都是使用的直接部署,所以这里也采用官网提供的源码部署的方式。 (PS:docker 部署也尝试了,一直不行)。

  1. 下载源代码,源码地址:https://github.com/apache/rocketmq-dashboard/tags

  2. 在本地解压源码,然后,对源码进行编译打包,打包命令是:

    $ mvn clean package -Dmaven.test.skip=true
    

    然后,将生成的 rocketmq-dashboard-1.0.0.jar包上传到服务器,jar的相对路径是 target\rocketmq-dashboard-1.0.0.jar

  3. 运行 rocketmq-dashboard-1.0.0.jar

nohup java -jar rocketmq-dashboard-1.0.0.jar --server.port=18080 --rocketmq.config.namesrvAddr='172.31.184.89:9876;172.31.186.180:9876'>/data/server/feige/rocketmq/logs/mq-console.log 2>&1 &

这里需要指定两个参数:

  1. --server.port=18080 设置端口是18080,因为默认的端口是8080,很可能会冲突
  2. --rocketmq.config.namesrvAddr='192.31.184.89:9876;192.31.186.180:9876' 用于指定nameserver集群的地址,不指定的话会有问题。

启动成功之后访问控制台:http://192.31.186.180:18080/

image-20230922193948595

这篇关于【RocketMQ 系列三】RocketMQ集群搭建(2m-2s-sync)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/220095

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

HDFS—集群扩容及缩容

白名单:表示在白名单的主机IP地址可以,用来存储数据。 配置白名单步骤如下: 1)在NameNode节点的/opt/module/hadoop-3.1.4/etc/hadoop目录下分别创建whitelist 和blacklist文件 (1)创建白名单 [lytfly@hadoop102 hadoop]$ vim whitelist 在whitelist中添加如下主机名称,假如集群正常工作的节

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

pico2 开发环境搭建-基于ubuntu

pico2 开发环境搭建-基于ubuntu 安装编译工具链下载sdk 和example编译example 安装编译工具链 sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib 注意cmake的版本,需要在3.17 以上 下载sdk 和ex