RabbitMQ、zookeeper、kafka、ActiveMQ安装与配置

1. RabbitMQ

RabbitMQ 采用 Erlang 语言开发,Erlang 语言由 Ericson 设计,Erlang 在分布式编程和故障恢复方面表现出色,电信领域被广泛使用。https://www.erlang.org/

1.1 包安装

#!/bin/bash
sudo apt-get install curl gnupg apt-transport-https -y
curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null
curl -1sLf "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xf77f1eda57ebb1cc" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/net.launchpad.ppa.rabbitmq.erlang.gpg > /dev/null
curl -1sLf "https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/io.packagecloud.rabbitmq.gpg > /dev/null
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
deb [signed-by=/usr/share/keyrings/net.launchpad.ppa.rabbitmq.erlang.gpg] http://ppa.launchpad.net/rabbitmq/rabbitmq-erlang/ubuntu bionic main
deb-src [signed-by=/usr/share/keyrings/net.launchpad.ppa.rabbitmq.erlang.gpg] http://ppa.launchpad.net/rabbitmq/rabbitmq-erlang/ubuntu bionic main
deb [signed-by=/usr/share/keyrings/io.packagecloud.rabbitmq.gpg] https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu/ bionic main
deb-src [signed-by=/usr/share/keyrings/io.packagecloud.rabbitmq.gpg] https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu/ bionic main
EOF
sudo apt-get update -y
sudo apt-get install -y erlang-base \
                        erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
                        erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \
                        erlang-runtime-tools erlang-snmp erlang-ssl \
                        erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl
sudo apt-get install rabbitmq-server -y --fix-missing
systemctl enable --now rabbitmq-server

#开启 web 界面管理插件

rabbitmq-plugins enable rabbitmq_management

登陆 web 管理界面:
rabbitmq 从 3.3.0 开始禁止使用 guest/guest 权限通过除 localhost 外的访问,直接访问报错
#rabbitmqctl add_user jack 123456      #创建用户
#rabbitmqctl set_user_tags jack administrator  #授权
或者
# vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.8.3/ebin/rabbit.app
39 {loopback_users, []}, #删除被禁止登陆的 guest 账户
# systemctl restart rabbitmq-server.service #重启 rabbitmq 服务
访问web
http://serverIP:15672

1.2 RabbitMQ 集群部署

Ubuntu 1804 安装集群版 RabbitMQ:
1)集群环境,三台服务器,具体 IP 如下:
172.31.0.105
172.31.0.106
172.31.0.107
2)各 MQ 服务器配置本地主机名解析:
172.31.0.105 mq-server1 mq-server1.magedu.net
172.31.0.106 mq-server2 mq-server2.magedu.net
172.31.0.107 mq-server3 mq-server3.magedu.net
3)各服务器安装 RabbitMQ:
4)启动 RabbitMQ 服务:
root@mq-server1:~# systemctl enable --now rabbitmq-server
root@mq-server2:~# systemctl enable --now rabbitmq-server
root@mq-server3:~# systemctl enable --now rabbitmq-server
5)同步.erlang.cookie
各服务器关闭 RabbitMQ:
root@mq-server1:~# systemctl stop rabbitmq-server
root@mq-server2:~# systemctl stop rabbitmq-server
root@mq-server3:~# systemctl stop rabbitmq-server
在 mq-server1 同步.erlang.cookie 至其他两台服务器:
# scp /var/lib/rabbitmq/.erlang.cookie 
172.31.0.106:/var/lib/rabbitmq/.erlang.cookie
# scp /var/lib/rabbitmq/.erlang.cookie 
172.31.0.107:/var/lib/rabbitmq/.erlang.cookie
6)各服务器启动 RabbitMQ:
# systemctl start rabbitmq-server
7)查看当前集群状态: root@mq-server1:~# rabbitmqctl cluster_status 8)创建 RabbitMQ 集群: 在 mq-server1 作为内存节点添加到 mq-server3,并作为内存节点,在 mq-server1 执行以下命令: root@mq-server1:~# rabbitmqctl stop_app #停止 app 服务 root@mq-server1:~# rabbitmqctl reset #清空元数据 #将 rabbitmq-server1 添加到集群当中,并成为内存节点,不加--ram 默认是磁盘节点 root@mq-server1:~# rabbitmqctl join_cluster rabbit@mq-server3 --ram root@mq-server1:~# rabbitmqctl start_app #启动 app 服务 在 mq-server2 作为内存节点添加到 mq-server3,并作为内存节点,在 mq-server2执行以下命令: root@mq-server2:~# rabbitmqctl stop_app root@mq-server2:~# rabbitmqctl reset root@mq-server2:~# rabbitmqctl join_cluster rabbit@mq-server3 --ram root@mq-server2:~# rabbitmqctl start_app 9)将集群设置为镜像模式: 只要在其中任意一台节点执行以下命令一次即可: root@mq-server1:~# rabbitmqctl set_policy ha-all "#" '{"ha-mode":"all"}' 10)验证当前集群状态: rabbitmqctl cluster_status 11)各服务器启动 web 插件: 不启用 web 插件的 rabbitmq 服务器,会在 web 节点提示节点统计信息不可用 (Node statistics not available) root@mq-server1:~# rabbitmq-plugins enable rabbitmq_management rabbitmqctl add_user jack 123456 #创建用户 rabbitmqctl set_user_tags jack administrator #授权 root@mq-server2:~# rabbitmq-plugins enable rabbitmq_management root@mq-server3:~# rabbitmq-plugins enable rabbitmq_management

1.3 RabbitMQ 常用命令

#添加账户 jack 密码为 123456
root@mq-server1:~# rabbitmqctl add_user jack 123456
#更改用户密码
root@mq-server1:~# rabbitmqctl change_password jack 654321
#设置 jack 用户对 magedu 的 vhost 有读写权限,三个点为配置正则、读和写
root@mq-server1:~# rabbitmqctl set_permissions -p magedu jack  ".*"  ".*"  ".*"

#创建 vhost
root@mq-server1:~# rabbitmqctl add_vhost magedu
#列出所有 vhost
root@mq-server1:~# rabbitmqctl list_vhosts
#列出所有队列
root@mq-server1:~# rabbitmqctl list_queues
#删除指定 vhost
root@mq-server1:~# rabbitmqctl delete_vhost magedu

1.4  二进制安装 rabbitmq

https://www.rabbitmq.com/install-generic-unix.html   #rabbitmq安装包
#erlang源码包
https://github.com/erlang/otp/releases/download/OTP-24.2/otp_src_24.2.tar.gz    
#编译安装erlang
cd /usr/local/src
wget  https://github.com/erlang/otp/releases/download/OTP-24.2/otp_src_24.2.tar.gz
tar xvf  otp_src_24.2.tar.gz
cd  otp_src_24.2
apt install ncurses-dev socat make
./configure --prifix=/apps/erlang&& make && make install
ln -sv /apps/erlang/bin/* /usr/bin/
#二进制安装rabbitmq
cd /usr/local/src
tar xvf rabbitmq-server-generic-unix-3.9.12.tar.xz -C /apps/
useradd  -m  -r  -s  /bin/bash  rabbitmq   #-m 创建家目录,-r系统用户 ,
chown rabbitmq.rabbitmq /apps/rabbitmq/ -R
ln -sv /apps/rabbitmq_server-3.9.12/sbin/* /usr/bin/
准备service文件 /lib/systemd/system/rabbitmq-server.service
注:主机名不能改,会导致rabbit不能启动
#cat  /lib/systemd/system/rabbitmq-server.service
[Unit]
Description=RabbitMQ broker
After=network.target epmd@0.0.0.0.socket
Wants=network.target epmd@0.0.0.0.socket

[Service]
Type=notify
User=rabbitmq
Group=rabbitmq
UMask=0027
NotifyAccess=all
TimeoutStartSec=600
LimitNOFILE=32768

Restart=on-failure
RestartSec=10
WorkingDirectory=/apps/rabbitmq_server-3.9.12/var/lib/rabbitmq
ExecStart=/apps/rabbitmq_server-3.9.12/sbin/rabbitmq-server
ExecStop=/apps/rabbitmq_server-3.9.12/sbin/rabbitmqctl shutdown
SuccessExitStatus=69

[Install]
WantedBy=multi-user.target

 

 2. ZooKeeper

ZooKeeper 是一个分布式服务框架,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:命名服务、状态同步、配置中心、集群管理等。

 2.1  ZooKeeper单机安装:

配置 java 环境:
https://zookeeper.apache.org/doc/r3.4.14/zookeeperAdmin.html#sc_requiredSoftware #官方依赖介绍
# apt install openjdk-8-jdk
# java -version
openjdk version "1.8.0_222"

部署 ZooKeeper:
https://archive.apache.org/dist/zookeeper/ #官网下载地址

# mkdir /apps
#cd /apps
#wget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8-bin.tar.gz
# tar xvf apache-zookeeper-3.5.8-bin.tar.gz
#cd apache-zookeeper-3.5.8-bin
# cd conf/
#mkdir /apps/apache-zookeeper-3.5.8-bin/data
# cp zoo_sample.cfg zoo.cfg
## vim zoo.cfg   #修改配置
        tickTime=2000
        initLimit=10
        syncLimit=5
        dataDir=/apps/apache-zookeeper-3.5.8-bin/data    #修改此项
        clientPort=2181
# /apps/apache-zookeeper-3.5.8-bin/bin/zkServer.sh  start    #启动ZooKeeper服务
# ss  -ntl  #会查看到监听在2181端口

验证 Zookeeper 状态:

# /apps/apache-zookeeper-3.5.8-bin/bin/zkServer.sh status

Mode: standalone #单机模式

# /apps/apache-zookeeper-3.5.8-bin/bin/zkCli.sh #登录本机客户端

 或 windows安装好JDK后,运行Zoolnspector进行连接查看

 2.2 ZooKeeper 集群

各 zookeeper 服务器都配置 java 环境并部署 zookeeper 集群
服务器环境:

Zk-node1:172.18.0.101
Zk-node2:172.18.0.102
Zk-node3:172.18.0.103

zk 节点 1 部署过程:
官方文档:https://zookeeper.apache.org/doc/r3.4.14/zookeeperAdmin.html
# apt install openjdk-8-jdk
# java –version #验证 JDK 版本
openjdk version "1.8.0_222"
# pwd
/usr/local/src
# tar xf zookeeper-3.4.14.tar.gz
# ln -sv /usr/local/src/zookeeper-3.4.14 /usr/local/zookeeper #解决并对 zookeeper做软连接
'/usr/local/zookeeper' -> '/usr/local/src/zookeeper-3.4.14'
# cd /usr/local/zookeeper/conf/
# cp zoo_sample.cfg zoo.cfg #基于模板配置文件生成配置文件
# mkdir /usr/local/zookeeper/data #创建数据目录

# grep -v "^#" /usr/local/zookeeper/conf/zoo.cfg #配置文件内容
tickTime=2000     #服务器与服务器之间的单次心跳检测时间间隔,单位为毫秒
initLimit=10      #集群中 leader 服务器与 follower 服务器初始连接心跳次数,即多少个 2000 毫秒
syncLimit=5       # leader 与 follower 之间连接完成之后,后期检测发送和应答的心跳次数,如果该 follower 在设置的时间内(5*2000)不能与  leader 进行通信,那么此 follower 将被视为不可用。
dataDir=/usr/local/zookeeper/data #自定义的 zookeeper 保存数据的目录
clientPort=2181    #客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求
maxClientCnxns=4096 #单个客户端 IP 可以和 zookeeper 保持的连接数

autopurge.snapRetainCount=128 #3.4.0 中的新增功能:启用后,ZooKeeper 自动清除功能会将 autopurge.snapRetainCount 最新快照和相应的事务日志分别保留在 dataDir 和 dataLogDir 中,并删除其余部分,默认值为 3。最小值为 3。

autopurge.purgeInterval=1 # 3.4.0 及之后版本,ZK 提供了自动清理日志和快照文件的功能,这个参数指定了清理频率,单位是小时,需要配置一个 1 或 更大的整数,默认是 0,表示不开启自动清理功能

server.1=172.18.0.101:2888:3888   # server.服务器编号=服务器 IP:LF 数据同步端口:LF 选举端口
server.2=172.18.0.102:2888:3888
server.3=172.18.0.103:2888:3888

# echo "1" > /usr/local/zookeeper/data/myid #自己的集群 id
 zk 节点 2 部署过程:
# apt install openjdk-8-jdk
# java -version
openjdk version "1.8.0_222"
# pwd
/usr/local/src
# tar xf zookeeper-3.4.14.tar.gz
# ln -sv /usr/local/src/zookeeper-3.4.14 /usr/local/zookeeper
'/usr/local/zookeeper' -> '/usr/local/src/zookeeper-3.4.14'
# cd /usr/local/zookeeper/conf/
# cp zoo_sample.cfg zoo.cfg
# mkdir /usr/local/zookeeper/data

# grep -v "^#" /usr/local/zookeeper/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
clientPort=2181
maxClientCnxns=4096
autopurge.snapRetainCount=128
autopurge.purgeInterval=1
server.1=172.18.0.101:2888:3888
server.2=172.18.0.102:2888:3888
server.3=172.18.0.103:2888:3888

# echo "2" > /usr/local/zookeeper/data/myid
zk 节点 3 部署过程:

 同节点2配置一样,就是myid不一样

# apt install openjdk-8-jdk
# java -version
openjdk version "1.8.0_222"
# pwd
/usr/local/src
# tar xf zookeeper-3.4.14.tar.gz
# ln -sv /usr/local/src/zookeeper-3.4.14 /usr/local/zookeeper
'/usr/local/zookeeper' -> '/usr/local/src/zookeeper-3.4.14'
# cd /usr/local/zookeeper/conf/
# cp zoo_sample.cfg zoo.cfg
# mkdir /usr/local/zookeeper/data #数据目录

# grep -v "^#" /usr/local/zookeeper/conf/zoo.cfg #配置文件
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
clientPort=2181
maxClientCnxns=4096
autopurge.snapRetainCount=128
autopurge.purgeInterval=1
server.1=172.18.0.101:2888:3888
server.2=172.18.0.102:2888:3888
server.3=172.18.0.103:2888:3888

# echo "3" > /usr/local/zookeeper/data/myid #当前节点 id

各服务器启动 zookeeper:

/usr/local/zookeeper/bin/zkServer.sh start

验证 zookeeper 集群状态:
1:zk 节点 1 验证 zookeeper: 
# /usr/local/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower
2:zk 节点 2 验证 zookeeper:
# /usr/local/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: leader
3:zk 节点 3 验证 zookeeper: 
# /usr/local/zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower

2.3 zookeeper 集群选举过程

1:节点角色状态:

LOOKING:寻找 Leader 状态,处于该状态需要进入选举流程
LEADING:领导者状态,处于该状态的节点说明是角色已经是 Leader
FOLLOWING:跟随者状态,表示 Leader 已经选举出来,当前节点角色是follower
OBSERVER:观察者状态,表明当前节点角色是 observer


2:选举 ID:

ZXID(zookeeper transaction id):每个改变 Zookeeper 状态的操作都会形成一个对应的 zxid。
myid:服务器的唯一标识(SID),通过配置 myid 文件指定,集群中唯一。


3:leader 选举过程:

当集群中的 zookeeper 节点启动以后,会根据配置文件中指定的 zookeeper 节点
地址进行 leader 选择操作,过程如下:
1) 每个 zookeeper 都会发出投票,由于是第一次选举 leader,因此每个节点都会把自己当做 leader 角色进行选举,每个 zookeeper 的投票中都会包含自己
的 myid 和 zxid,此时 zookeeper 1 的投票为 myid 为 1,初始 zxid 有一个初始值,后期会随着数据更新而自动变化,zookeeper2 的投票为 myid 为 2,初
始 zxid 为初始生成的值。
2) 每个节点接受并检查对方的投票信息,比如投票时间、是否状态为 LOOKING状态的投票。
3) 对比投票,优先检查 xvid,如果 xvid 不一样则 xvid 大的为 leader,如果 xvid相同则继续对比 myid,myid 大的一方为 leader。

  成为 Leader 的必要条件: Leader 要具有最高的 zxid;当集群的规模是 n 时,集群中大多数的机器(至少 n/2+1)得到响应并 follow 选出的 Leader。
  心跳机制:Leader 与 Follower 利用 PING 来感知对方的是否存活,当 Leader 无法响应 PING 时,将重新发起 Leader 选举。

2.4  安装zookeeper客户端ZooInspector

 客户端编译:

apt install openjdk-11-jdk
apt install maven
apt install git
cd /opt
git clone https://github.com/zzhang5/zooinspector.git
# cd zooinspector/
# mvn clean package
maven打包zooinspector如果报错
[ERROR] Source option 5 is no longer supported. Use 6 or later.
[ERROR] Target option 1.5 is no longer supported. Use 1.6 or later.
错误原因:
报这个错是因为你的本地开发jdk版本比你pom文件默认版本用的高
在自己工程的pom文件下添加如下配置信息
#vim /opt/zooinspector/pom.xml
<configuration>
<source>11</source>    #修改为JDK11
<target>11</target>       #修改为JDK11
</configuration>

Linux 客户端使用:

# chmod +x target/zooinspector-pkg/bin/zooinspector.sh
# target/zooinspector-pkg/bin/zooinspector.sh
# 需打开Xmanager
# xhell修改,打开属性ALT+P-->隧道-->转发X11到X DISPLAY

windows 客户端使用:

将linux里编译好的包,整个目录复制到windows 的D:\zookeeper新建文件夹下
#安装windows的JDK
#双击运行D:\zookeeper\zooinspector\target\zooinspector-pkg\bin\zooinspector.bat

 3. kafka

Kafka 被称为下一代分布式消息系统,由 scala 和 Java 编写,是非营利性组织ASF(Apache Software Foundation,简称为 ASF)基金会中的一个开源项目,

比如HTTP Server、Hadoop、ActiveMQ、Tomcat 等开源软件都属于 Apache 基金会的开源软件,类似的消息系统还有 RbbitMQ、ActiveMQ、ZeroMQ。

Kafka®用于构建实时数据管道和流应用程序。 它具有水平可伸缩性,容错性,快速性,可在数千家公司中投入生产。

kafka 最主要的优势是其具备分布式功能、并可以结合 zookeeper 可以实现动态扩容,Kafka 是一种高吞吐量的分布式发布订阅消息系统。

kafka 通过 O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以 TB的消息存储也能够保持长时间的稳定性能。

高吞吐量:即使是非常普通的硬件 Kafka 也可以支持每秒数百万的消息。

支持通过 Kafka 服务器分区消息。

支持 Hadoop 并行数据加载。

 3.1 二进制部署kafka 

部署三台服务器的高可用 kafka 环境。

部署环境:

Server1:172.18.0.101

Server2:172.18.0.102

Server3:172.18.0.103

 

下载地址 :http://kafka.apache.org/downloads

#版本格式 kafka_scala 版本_kafka 版本

二进制下载Binary downloads: Scala 2.12 - kafka_2.12-3.1.0.tgz # scala 版本 2.12

 3.1.1kafka 节点 1: 

# pwd
/usr/local/src
#tar xvf kafka_2.12-2.3.1.tgz

# ln -sv /usr/local/src/kafka_2.12-2.3.1 /usr/local/kafka
'/usr/local/kafka' -> '/usr/local/src/kafka_2.12-2.3.1'
# mkdir /usr/local/kafka/kafka-logs #创建数据目录
# cd /usr/local/kafka/config/

#vim server.properties   #修改kafka主配置文件
    21 broker.id=1    #每个 broker 在集群中的唯一标识,正整数。
    31 listeners=PLAINTEXT://172.18.0.101:9092 #监听地址,一般为自己本机的IP地址
    60 log.dirs=/usr/local/kafka/kafka-logs #kakfa 用于保存数据的目录,所有的消息都会存储在该目录当中
    65 num.partitions=3         #设置创建新的 topic 默认分区数量
    103 log.retention.hours=168 #设置 kafka 中消息保留时间,默认为 168 小时即 7天
    
    #zookeeper.connect 指定连接的 zk 的地址,zk 中存储了 broker 的元数据信息,格式如下:
    123 zookeeper.connect=172.18.0.101:2181,172.18.0.102:2181,172.18.0.103:2181
    126 zookeeper.connection.timeout.ms=6000 #设置连接 zookeeper 的超时时间,默认 6 秒钟

3.1.2 kafka 节点 2:

# pwd
/usr/local/src
# ln -sv /usr/local/src/kafka_2.12-2.3.1 /usr/local/kafka
'/usr/local/kafka' -> '/usr/local/src/kafka_2.12-2.3.1'
# cd /usr/local/kafka/config/
21 broker.id=2
31 listeners=PLAINTEXT://172.18.0.102:9092
60 log.dirs=/usr/local/kafka/kafka-logs
65 num.partitions=1
103 log.retention.hours=168
123 zookeeper.connect=172.18.0.101:2181,172.18.0.102:2181,172.18.0.103:2181
126 zookeeper.connection.timeout.ms=6000 

3.1.3 kafka 节点 3:

kafka 节点 3:
# pwd
/usr/local/src
# ln -sv /usr/local/src/kafka_2.12-2.3.1 /usr/local/kafka
'/usr/local/kafka' -> '/usr/local/src/kafka_2.12-2.3.1'
# cd /usr/local/kafka/config/
21 broker.id=3
31 listeners=PLAINTEXT://172.18.0.103:9092
60 log.dirs=/usr/local/kafka/kafka-logs
65 num.partitions=1
103 log.retention.hours=168
123 zookeeper.connect=172.18.0.101:2181,172.18.0.102:2181,172.18.0.103:2181
126 zookeeper.connection.timeout.ms=6000

3.1.4 节点 1 /2/3启动 kafka:

# mkdir /usr/local/kafka/kafka-logs #创建数据目录

# /usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties #以守护进程启动

 

3.2 验证 zookeeper 中kafka 元数据:

1、Broker 依赖于 Zookeeper,每个 Broker 的 id 和 Topic、Partition 这些元数据信息都会写入 Zookeeper 的 ZNode 节点中;
2、Consumer 依赖于 Zookeeper,Consumer 在消费消息时,每消费完一条消息,会将产生的 offset 保存到 Zookeeper 中,下次消费在当前 offset 往后继续消费;
ps:kafka0.9 之前 Consumer 的 offset 存储在 Zookeeper 中,kafka0,9 以后 offset存储在本地。
3、Partition 依赖于 Zookeeper,Partition 完成 Replication 备份后,选举出一个Leader,这个是依托于 Zookeeper 的选举机制实现的;

 

 

 3.2.1 测试 kafka 读写数据:

创建 topic:
创建名为magedu,partitions(分区)为 3,replication(每个分区的副本数/每个分区的分区因子)为 3 的 topic(主题):

在任意 kafaka 服务器操作:
#/usr/local/kafka/bin/kafka-topics.sh --create --zookeeper 172.18.0.101:2181,172.18.0.102:2181,172.18.0.103:2181 --partitions 3 --replication-factor 3 --topic magedu

3.2.2 验证 topic:

状态说明:magedu 有三个分区分别为0、1、2,分区0的leader是3(broker.id),分区 0 有三个副本,并且状态都为 lsr(ln-sync,表示可以参加选举成为 leader)。

 

 3.2.3 获取所有 topic:

# /usr/local/kafka/bin/kafka-topics.sh --list --zookeeper 

 

3.2.4 安装kafka tool windows客户端

0
登录kafka tool 客户端
0
:测试发送消息:
0
 
0
0
0
可以到任意一台 kafka 服务器测试消息获取,只要有相应的消息获取客户端即可。
/usr/local/kafka/bin/kafka-console-consumer.sh --topic magedu --bootstrap-server 172.18.0.102:9092 --from-beginning
0
:删除 topic:
/usr/local/kafka/bin/kafka-topics.sh --delete --zookeeper 172.18.0.101:2181,172.18.0.102:2181,172.18.0.103:2181 --topic magedu
0
0
0
 

kafka 总结:

1. 分区
基于分区将数据分散写入到不同kafka服务器的topic,提升并行写入和读取性能,每一个分区都可以设置不同的分区因子,来实现的数据的高可用,
一个分区作为leader另外作为follower(结合zookeeper实现选举)
2. 数据顺序写入,先进先出
3. MMAP 内存映射
kafka为了优化及写入性能,使用了MMAP提升写入IO
0
4. 零拷贝技术,提升读性能
 

4. ActiveMQ  【不常用

4.1:ActiveMQ 介绍:

ActiveMQ 是一种开源的基于 JMS(Java Message Servie)规范的一种消息中间件的实现,ActiveMQ 采用 Java 开发,设计目标是提供标准的、面向消息的、
能够跨越多语言和多系统的应用集成消息通信中间件。
ActiveMQ 提供了多语言客户端支持,除了一般的 Java 客户端以外,还可以使用C/C++、PHP、Python、JavaScript(Ajax)等语言开发客户端。
目前分为经典和下一代两个版本。这里示例安装经典版本

4.2 ActiveMQ 单机安装:

1):配置 java 环境:
ActiveMQ 依赖于 java 环境,因此要先配置 java
# apt install openjdk-8-jdk
# java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1ubuntu1~18.04.1-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)
2):部署并启动 ActiveMQ:
# tar xvf apache-activemq-5.15.10-bin.tar.gz
# ln -sv /usr/local/src/apache-activemq-5.15.10 /usr/local/activemq
# cd /usr/local/activemq
# /usr/local/activemq/bin/linux-x86-64/activemq start
Starting ActiveMQ Broker...
 
0
vim ./conf/jetty.xml #修改监听地址,监听端口为8161
0
/usr/local/activemq/bin/linux-x86-64/activemq stop #重启服务
/usr/local/activemq/bin/linux-x86-64/activemq start
 

登录 ActiveMQ Web 界面:

默认账户名和密码: admin
Web 管理端口:8161
客户端访问端口:61616
0
0
 

RocketMQ:

阿里开源基于 Java 开发的消息队列:http://jm.taobao.org/tags/ApacheRocketMQ/,已经贡献给 Apache 基金会
https://rocketmq.apache.org/
https://github.com/apache/rocketmq
https://github.com/apache/rocketmq/tree/master/docs/cn
https://rocketmq.apache.org/dowloading/releases/ #下载地址

 
 
posted @ 2022-02-09 16:45  日落-之前  阅读(621)  评论(0)    收藏  举报