编程环境
- 九、搜索优化
-
- 十、分布式
-
- 十一、消息队列
- RabbitMQ
- Kafka
- 安装
- 下载
- 解压
- 目录结构
- site-docs目录
- bin目录
- config目录
- 常用脚本
- 修改配置
- 单机测试(本机进行单节点测试)
- 集群测试
- 修改zookeeper的配置文件
- 修改kafka服务配置文件
- 修改生产者配置文件
- 修改消费者配置文件
- 基础
- 重要组成
- 重要命令
因为文章太长了,所以博主分了三节来讲
九、搜索优化
ElasticSearch
后面的内容持续更新 。。。(因为博主对ElasticSearch需求并不高所以就先不安装了,先把其他搭建完成后再来安装ElasticSearch)
十、分布式
Zookeeper
离线下载
解压
把离线下载的安装包放在/usr/local
下,方便管理
//创建一个文件夹用来放解压后的zookeeper
mkdir /usr/local/zookeeper
//解压
tar -zxvf /usr/local/zookeeper/apache-zookeeper-3.6.1bin.tar.gz -C /usr/local/zookeeper
文件结构
解压完成后我们需要看几个文件
- 肯定是
apache-zookeeper-3.6.1-bin
(刚刚解压得到的文件)目录下的README
里面介绍了zookeeper的官网和wiki,最关键的是说了对java版本的要求,比如这里说如果要使用java1.8来编译,应该使用u211或者更新的版本
说有的文档都放在docs文件夹中了
bin
目录下的文件
bin
目录可以说是整个文件的核心,目录结构如下
这里我们又看到了熟悉的README,内容如下
这里给出了不同的系统的Zookeeper服务的对应脚本
unix
和cygwin
可以使用.sh
msdos
和windows
可以是用 .cmd
conf
目录(配置文件目录)
这个目录包含所有关于zookeeper的配置信息
目录结构如下
这里的zoo_sample.cfg
需要注意,cfg后缀的一般为服务的重要配置,内容如下
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
clientPort=2181
默认开启的配置如下
- tickTime
滴答时间间隔(通信间隔) - initLimit
初始通信时间限制 - syncLimit
同步通信时间限制 - dataDir
数据存放目录 - clientPort
客户端端口号
是不是跟tomcat的配置文件有点像呢?
自定义配置
我们可以修改这个配置文件zoo_sample.cfg
来自定义,常见修改数据存放目录和客户端端口号
修改数据存放目录
比如修改数据存放目录,把数据放在zookeeper目录下
创建一个文件夹
mkdir /usr/local/zookeeper/apache-zookeeper-3.6.1-bin/data
把zoo_sample.cfg
中的dataDir的值改为指定文件夹就可以了
#示例
dataDir=/usr/local/zookeeper/apache-zookeeper-3.6.1-bin/data
修改客户端端口号
我们还可以修改客户端端口号,改为指定的端口号,来防止端口号的冲突
clientPort=6666
启动
因为在linux系统下,所以调用.sh
来执行
//在bin目录下
cd /usr/local/zookeeper/apache-zookeeper-3.6.1-bin
//启动zookeeper服务
./zkServer.sh start
示例输出
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/apache-zookeeper-3.6.1-bin/bin/../conf/z.cfg
Client port found: 2181. Client address: localhost.
Mode: standalone
坑1
这里,细致的人可能发现了在Using config: /usr/local/zookeeper/apache-zookeeper-3.6.1-bin/bin/../conf/z.cfg
中,为什么博主使用的配置文件是z.cfg
,因为zoo_sample.cfg
是一个官方提供的模板,但是在运行时,是不会加载的
- 把这个文件改一下名字
- 直接复制该文件,并命名为
z.cfg
(其他名字也可以,实际识别的是后缀为cfg
但是不识别前缀为zoo_sample
的文件)
坑2
大家第一次启动,可能会输出下面的内容,很明显这是一个错误,启动失败
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/apache-zookeeper-3.6.1-bin/bin/../conf/z.cfg
Client port found: 2181. Client address: localhost.
Error contacting service. It is probably not running.
原因是什么呢?
- 首先先确定集群是否正常运行
这个在linux服务器编程环境安装中的坑附加详细安装步骤(二)说的很详细了
//查看节点状态(正常状态 为Ready)
kubectl get nodes
//状态为Running
kubectl get pods --namespace=kube-system
- 查看zookeeper状态
./zkServer.sh status
- 查看日志
xxx为hostname
cat /usr/local/zookeeper/apache-zookeeper-3.6.1-bin/logs/zookeeper-root-server-xxx.out
- 查看ERRO信息
针对问题来解决
比如,博主曾遇到一个问题是Problem starting AdminServer on address 0.0.0.0, port 8080 and command URL
这个是端口占用问题,就是说8080端口已经被占用了,zookeeper不能使用默认端口来启动,造成了服务启动失败,我们来查看一下端口。
//查看所有端口,显示端口的PID和程序名称,并且不解析名称
netstat -apn
//我们也可以通过管道筛选一下
netstat -apn | grep 8080
博主发现是tcp6 0 0 :::8080 :::* LISTEN 1731/java
java服务占用,其实呢,是tomcat 我们都知道tomcat的默认端口就是8080
而zookeeper在3.5版本之后的默认端口也是8080
所以我们修改一下zookeeper的默认端口,在配置文件中添加
xxxx改为自己想要自定义的端口号
admin.serverPort=xxxx
重新启动
./zkServer.sh start
成功
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/apache-zookeeper-3.6.1-bin/bin/../conf/z.cfg
Client port found: 6666. Client address: localhost.
Mode: standalone
十一、消息队列
RabbitMQ
安装RabbitMQ会有一些依赖关系,我们先通过安装erlang
来解决一些依赖关系如yum-utils.noarch
依赖关系如下
//通过 curl 来获取rpm的bash脚本 并通过bash执行
curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
正在解决依赖关系
--> 正在检查事务
---> 软件包 yum-utils.noarch.0.1.1.31-53.el7 将被 升级
---> 软件包 yum-utils.noarch.0.1.1.31-54.el7_8 将被 更新
--> 解决依赖关系完成
依赖关系解决
=====================================================================================================================================
Package 架构 版本 源 大小
=====================================================================================================================================
正在更新:
yum-utils noarch 1.1.31-54.el7_8 updates 122 k
事务概要
=====================================================================================================================================
升级 1 软件包
总下载量:122 k
Downloading packages:
No Presto metadata available for updates
yum-utils-1.1.31-54.el7_8.noarch.rpm | 122 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在更新 : yum-utils-1.1.31-54.el7_8.noarch 1/2
清理 : yum-utils-1.1.31-53.el7.noarch 2/2
验证中 : yum-utils-1.1.31-54.el7_8.noarch 1/2
验证中 : yum-utils-1.1.31-53.el7.noarch 2/2
更新完毕:
yum-utils.noarch 0:1.1.31-54.el7_8
完毕!
安装
yum install erlang-22.3.3-1.el7.x86_64
正在解决依赖关系
--> 正在检查事务
---> 软件包 erlang.x86_64.0.22.3.3-1.el7 将被 安装
--> 解决依赖关系完成
依赖关系解决
=====================================================================================================================================
Package 架构 版本 源 大小
=====================================================================================================================================
正在安装:
erlang x86_64 22.3.3-1.el7 rabbitmq_erlang 19 M
事务概要
=====================================================================================================================================
安装 1 软件包
总下载量:19 M
安装大小:33 M
Is this ok [y/d/N]: y
Downloading packages:
erlang-22.3.3-1.el7.x86_64.rpm | 19 MB 00:00:12
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : erlang-22.3.3-1.el7.x86_64 1/1
验证中 : erlang-22.3.3-1.el7.x86_64 1/1
已安装:
erlang.x86_64 0:22.3.3-1.el7
完毕!
测试erlang
erl
//输出
Erlang/OTP 22 [erts-10.7.1] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [hipe]
Eshell V10.7.1 (abort with ^G)
1>
正式安装RabbitMQ
//通过 curl 来获取rpm的bash脚本 并通过bash执行
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash
查询有哪些版本
yum search rabbitmq-server
安装
yum install rabbitmq-server-3.8.3-1.el7.noarch
依赖关系解决
=====================================================================================================================================
Package 架构 版本 源 大小
=====================================================================================================================================
正在安装:
rabbitmq-server noarch 3.8.5-1.el7 rabbitmq_rabbitmq-server 15 M
为依赖而安装:
socat x86_64 1.7.3.2-2.el7 base 290 k
事务概要
=====================================================================================================================================
安装 1 软件包 (+1 依赖软件包)
总下载量:15 M
安装大小:16 M
Is this ok [y/d/N]: y
Downloading packages:
(1/2): socat-1.7.3.2-2.el7.x86_64.rpm | 290 kB 00:00:00
(2/2): rabbitmq-server-3.8.5-1.el7.noarch.rpm | 15 MB 00:00:05
-------------------------------------------------------------------------------------------------------------------------------------
总计 2.8 MB/s | 15 MB 00:00:05
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : socat-1.7.3.2-2.el7.x86_64 1/2
正在安装 : rabbitmq-server-3.8.5-1.el7.noarch 2/2
验证中 : rabbitmq-server-3.8.5-1.el7.noarch 1/2
验证中 : socat-1.7.3.2-2.el7.x86_64 2/2
已安装:
rabbitmq-server.noarch 0:3.8.5-1.el7
作为依赖被安装:
socat.x86_64 0:1.7.3.2-2.el7
完毕!
设置RabbitMQ开机自启
chkconfig rabbitmq-server on
启动RabbitMQ服务
systemctl start rabbitmq-server.service
注意这里有一个坑
就是下面这段错误日志
这是我在执行上面的启动RabbitMQ服务后产生的
Job for rabbitmq-server.service failed because the control process exited with error code.
See "systemctl status rabbitmq-server.service" and "journalctl -xe" for details.
//按照提示 我查看了RabbitMQ服务的状态
systemctl status rabbitmq-server
//输出为
● rabbitmq-server.service - RabbitMQ broker
Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: disabled)
Active: activating (auto-restart) (Result: exit-code)
Process: 32494 ExecStart=/usr/sbin/rabbitmq-server (code=exited, status=1/FAILURE)
Main PID: 32494 (code=exited, status=1/FAILURE)
7月 08 00:11:14 192.168.0.130 systemd[1]: Failed to start RabbitMQ broker.
7月 08 00:11:14 192.168.0.130 systemd[1]: Unit rabbitmq-server.service entered failed state.
7月 08 00:11:14 192.168.0.130 systemd[1]: rabbitmq-server.service failed.
这里可以看出RabbitMQ服务一直处于自动重启的状态,在日志中可以看到 开启RabbitMQ中断失败,启动服务失败
这个是因为status =1 所以执行了exited操作(也就是退出)
博主找了很久,执行了journalctl -xe
(开启服务失败后,系统提示的命令)发现问题出在hostname
journalctl -xe
//输出如下
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit rabbitmq-server.service has begun starting up.
7月 08 00:22:02 192.168.0.130 rabbitmq-server[39577]: 00:22:02.855 [error]
7月 08 00:22:02 192.168.0.130 rabbitmq-server[39577]: 00:22:02.859 [error] BOOT FAILED
7月 08 00:22:02 192.168.0.130 rabbitmq-server[39577]: 00:22:02.859 [error] ===========
7月 08 00:22:02 192.168.0.130 rabbitmq-server[39577]: BOOT FAILED
7月 08 00:22:02 192.168.0.130 rabbitmq-server[39577]: ===========
7月 08 00:22:02 192.168.0.130 rabbitmq-server[39577]: 00:22:02.859 [error] ERROR: epmd error for host 192: badarg (unknown POSIX error)
7月 08 00:22:02 192.168.0.130 rabbitmq-server[39577]: ERROR: epmd error for host 192: badarg (unknown POSIX error)
7月 08 00:22:02 192.168.0.130 rabbitmq-server[39577]: 00:22:02.859 [error]
7月 08 00:22:03 192.168.0.130 rabbitmq-server[39577]: 00:22:03.861 [error] Supervisor rabbit_prelaunch_sup had child prelaunch started with rab
7月 08 00:22:03 192.168.0.130 rabbitmq-server[39577]: 00:22:03.861 [error] CRASH REPORT Process <0.152.0> with 0 neighbours exited with reason:
7月 08 00:22:05 192.168.0.130 rabbitmq-server[39577]: {"Kernel pid terminated",application_controller,"{application_start_failure,rabbitmq_prel
7月 08 00:22:05 192.168.0.130 rabbitmq-server[39577]: Kernel pid terminated (application_controller) ({application_start_failure,rabbitmq_prela
7月 08 00:22:05 192.168.0.130 rabbitmq-server[39577]: Crash dump is being written to: erl_crash.dump...done
7月 08 00:22:05 192.168.0.130 systemd[1]: rabbitmq-server.service: main process exited, code=exited, status=1/FAILURE
7月 08 00:22:05 192.168.0.130 systemd[1]: Failed to start RabbitMQ broker.
-- Subject: Unit rabbitmq-server.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit rabbitmq-server.service has failed.
--
-- The result is failed.
7月 08 00:22:05 192.168.0.130 systemd[1]: Unit rabbitmq-server.service entered failed state.
7月 08 00:22:05 192.168.0.130 systemd[1]: rabbitmq-server.service failed.
博主发现ERROR: epmd error for host 192: badarg (unknown POSIX error)
和ERROR: epmd error for host 192: badarg (unknown POSIX error)
所以博主尝试去修改hostname
vi /etc/hostname
//将hostname修改为英文名
//因为是主节点,所以这里设置为
k8s—master
重启服务,发现还是失败
于是博主用hostname查看了一下
hostname
//输出为
192
哦吼!没有修改成功? 是因为这里的hostname已经加载完成,我们需要更新一下,或者直接通过命令静态修改hostname,命令如下(k8s-master为你想要设置的主机名)
hostnamectl --static set-hostname k8s-master
hostname查看一下,可以发现设置成功了
hostname
//输出为
k8s-master
于是博主重启服务试一下,发现成功
systemctl restart rabbitmq-server.service
开启WEB可视化管理插件
rabbitmq-plugins enable rabbitmq_management
//输出为如下内容,为成功开启
The following plugins have been enabled:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatch
started 3 plugins.
我们现在可以用浏览器访问一下试试
//浏览器中输入
localhost:15672
成功进入了管理页面
我们可以通过默认用户来登录 (Username为guest , Password为guest)
这个只能在本地登陆
创建新用户来登录(这里的用户名和密码 填入自己想要设置的值)
也可以用guest用户登陆后从管理页面添加用户
//执行命令
rabbitmqctl add_user 用户名 密码
//输出为
Adding user "用户名" ...
我们在刚刚在浏览器进入的管理页面中输入账号密码登录
成功登录
这里我们需要注意的是,如果修改用户名,静态修改或者修改hostname文件重启,rabbitmq会丢失用户
因为rabbitmq的用户名存储是按照hostname来存储的
接下来我们要给新加入的用户设置一下权限
管理页面的权限解释更直观(management、policymaker、adminstrator)
- 通过命令行
rabbitmqctl set_user_tags 用户名 权限
- 通过管理页面
管理页面的功能还是挺全面的
Kafka
安装
下载
和其他软件一样我们可以通过获取安装包和在线安装的方式来安装kafka
这里为了 实现自定义,博主只写离线安装的方法
安装包需要的评论留言
解压
//创建一个kafka文件夹,把解压后的目录放在该文件夹下
mkdir /usr/local/kafka
//把x改为你下载的版本号
tar -xzf kafka_x.x-x.x.x.tgz -C /usr/local/kafka
/切换到解压后的目录中
cd kafka_x.x-x.x.x
目录结构
- bin
顾名思义 ,根目录 - config
配置文件目录 - libs
库目录,包括所有jar包 - site-docs
文档目录
site-docs目录
第一次安装的小伙伴,可以先看看文档目录下的内容
文档目录下也是一个压缩包
解压后包括所有的官方文档
bin目录
根目录下是所有的执行脚本,包括 .sh
脚本和 .bat
脚本(.bat
脚本在weindows文件夹下)
config目录
常用脚本
kafka服务开启停止
kafka管理
控制(配置、生产者、消费者、消费者组)
修改配置
//x.x-x.x.为版本号,切换到配置文件目录下
cd /usr/local/kafka/kafka-x.x-x.x.x/config/
//编辑server.properties(服务配置)
vim server.properties
终端1
//启动服务
./bin/kafka-server-start.sh ./config/server.properties
//关闭服务
./bin/kafka-server-stop.sh ./config/server.properties
单机测试(本机进行单节点测试)
创建一个测试topic(主题)
./bin/kafka-topics.sh --create --zookeeper localhost:2181 -replication-factor 1 --partitions 1 --topic test
执行list(列表)命令来查看这个topic,查看是否创建成功test
./bin/kafka-topics.sh --list --zookeeper localhost:2181
样例输出
test
终端2
运行 producer,然后在控制台输入一些消息以发送到服务器。
./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
默认情况下,每行将作为单独的message发送。
样例输入
This is first message
This is second message
终端3
运行consumer(消费者),将消息转储到标准输出,消费消息
./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
样例输出
This is first message
This is second message
集群测试
修改zookeeper的配置文件
利用zookeeper集群来配置
实例主机1、2、3
修改zookeeper的配置文件z.cfg
(上文提到过)
cd /usr/local/zookeeper/apache-zookeeper-3.6.1-bin/conf/z.cfg
文件末尾追加以下内容
server.1=192.168.1.1:2888:3888
server.2=192.168.1.2:2888:3888
server.3=192.168.1.3:2888:3888
修改kafka文件夹下生成的data文件夹下的myid
文件
分别写入三个不同的数字
这个数字为唯一标识
要与下面的kafka 的 borke.id
为同一个值
修改kafka服务配置文件
修改server.properties
配置
//x.x-x.x.为版本号,切换到配置文件目录下
cd /usr/local/kafka/kafka-x.x-x.x.x/config/
//编辑server.properties(服务配置)
vi server.properties
修改zookeeper连接
//样例
//broker.id 为之前设置的myid的值,这里只写master节点的配置,其他的节点以此类推(broker.id=2、broker.id=3)
broker.id=1
//监听端口
listeners=PLAINTEXT://192.168.1.1:9092
advertised.host.name=192.168.1.1
advertised.port=9092
//三台实例的ip地址分别为192.168.1.1,192.168.1.2,192.168.1.3
zookeeper.connect=192.168.1.1:2181,192.168.1.2:2181,192.168.1.3:2181
//修改日志存放文件夹(依次为broker1、broker2、broker3)
log.dirs=/usr/local/kafka//kafka_x.x-x.x.x/logs/broker1
修改生产者配置文件
修改producer.properties
//x.x-x.x.为版本号,切换到配置文件目录下
cd /usr/local/kafka/kafka-x.x-x.x.x/config/
//编辑server.properties(服务配置)
vi producer.properties
//修改以下内容
metadata.broker.list=192.168.1.1:9092,192.168.1.2:9092,192.168.1.3:9092
producer.type=async
修改消费者配置文件
修改consumer.properties
//x.x-x.x.为版本号,切换到配置文件目录下
cd /usr/local/kafka/kafka-x.x-x.x.x/config/
//编辑server.properties(服务配置)
vi consumer.properties
//样例
//三台实例的ip地址分别为192.168.1.1,192.168.1.2,192.168.1.3
zookeeper.connect=192.168.1.1:2181,192.168.1.2:2181,192.168.1.3:2181
实例主机1
创建一个测试topic(主题)只有一个分区
./bin/kafka-topics.sh --create --zookeeper 192.168.1.1:2181,192.168.1.1:2181,192.168.1.1:2181 -replication-factor 1 --partitions 1 --topic test
执行list(列表)命令来查看这个topic,查看是否创建成功test
./bin/kafka-topics.sh --list --zookeeper localhost:2181
样例输出
test
实例主机1
运行 producer,然后在控制台输入一些消息以发送到服务器。
./bin/kafka-console-producer.sh --broker-list 192.168.1.1:9092,192.168.1.1:9092,192.168.1.1:9092 --topic test
默认情况下,每行将作为单独的message发送。
样例输入
This is first message
This is second message
实例主机2
运行consumer(消费者),将消息转储到标准输出,消费消息
./bin/kafka-console-consumer.sh --bootstrap-server 192.168.1.1:2181,192.168.1.1:2181,192.168.1.1:2181 --topic test
样例输出
This is first message
This is second message
基础
官网是这样介绍kafka的
Kafka is A distributed streaming platform
即分布式流处理平台
并且kafka是log as a service
(日志即服务)的项目
kafka通过Hadoop的并行加载机制来统一线上和离线的消息处理来实现对网站活动的处理,比如对消息进行实时处理,实时监控,以及加载到Hadoop或脱机数据仓库系统中来进行脱机处理和报告,并且通过集群机来提供实时的消费。
适用场景:
- 构造实时流数据管道来获取数据
- 构建实时流式应用程序来进行流处理
基本概念:
- Kafka作为一个集群,运行在一台或者多台服务器上
- Kafka 通过 topic 对存储的流数据进行分类
- 每条记录中包含一个key,一个value和一个timestamp(时间戳)
这个时间戳的概念就来自于日志,因为日志的记录被追加到日志的末尾,并且读取从左到右进行,记录的顺序定义了“时间”的概念,因为左边的条目定义为比右边的条目更早,每条记录有其唯一的顺序日志条目号,该日志条目号可以认为是该条目的“时间戳”。
日志还被称为预写日志、提交日志或事务日志,在不了解日志的情况下,无法完全理解数据库,NoSQL存储,键值存储,复制,paxos,hadoop,版本控制
四个核心的API:
-
The Producer API
允许一个应用程序发布一串流式的数据到一个或者多个Kafka topic。
-
The Consumer API
允许一个应用程序订阅一个或多个 topic ,并且对发布给他们的流式数据进行处理。
-
The Streams API
允许一个应用程序作为一个流处理器,消费一个或者多个topic产生的输入流,然后生产一个输出流到一个或多个topic中去,在输入输出流中进行有效的转换。
-
The Connector API
允许构建并运行可重用的生产者或者消费者,将Kafka topics连接到已存在的应用程序或者数据系统。比如,连接到一个关系型数据库,捕捉表(table)的所有变更内容
kafka的优点:
-
通过I/O的磁盘数据结构提供消息的持久化,这种结构对于即使TB大小的消息存储也能够保持长时间的稳定性能
-
高吞吐量:即使是非常普通的硬件,也可以支持每秒数十万的消息
-
支持通过kafka服务器和消费机集群来分区消息
-
支持Hadoop并行数据加载来统一线上和离线的消息处理
重要组成
-
Broker:Kafka节点,一个Kafka节点就是一个broker,多个broker可以组成一个Kafka集群。
-
Topic:消息存放的目录即主题,例如page view日志、click日志等都可以以topic的形式存在,Kafka集群能够同时负责多个topic的分发。主题是消息发布的地方,可以用来区分不同的业务系统。Kafka中的topic是多订阅者模式,一个topic可以拥有一个或者多个消费者来订阅它的数据。
-
Partition:partition是topic物理上的分区,它分布在Kafka集群的服务器上,一个topic可以分为多个partition,每个分区都是有序且顺序不可变的记录集,每个服务器在处理数据和请求时,共享这些分区,每个分区都会在已配置的服务器上进行备份,确保容错性。.
-
Segment:partition物理上由多个segment组成,每个Segment存着message信息
-
Producer : 生产者可以将message(消息)发布到所选择的topic(主题)中。生产者负责将记录分配到topic的指定 partition(分区)中。可以使用循环的方式来简单地实现负载均衡,也可以根据某些语义分区函数(例如:记录中的key)来完成。
-
Consumer : 消费者使用一个消费组名称来进行标识,发布到topic中的每条记录被分配给订阅消费组中的一个消费者实例.消费者实例可以分布在多个进程中或者多个机器上。
如果所有的消费者实例在同一消费组中,消息记录会负载平衡到每一个消费者实例.
如果所有的消费者实例在不同的消费组中,每条消息记录会广播到所有的消费者进程.
-
Consumer Group:一个Consumer Group(消费组)包含多个consumer(消费者),便于扩展和容错, 这个是预先在配置文件中配置好的。
仅有一个Partition(分区)的Topic(主题)可以实现每个Consumer Group(消费组)只有一个consumer(消费者)进程,这样就可以把message(消息)记录在一个Partition(分区)中。
重要命令
//生成随机uuid
uuidgen
//查看网卡连接
nmcli connection show
//查看网卡ens33的设备信息
nmcli device show ens33
//创建文件夹b在指定目录a下(xx为上一级目录,这里用的绝对路径)
mkdir xx/a/b
//创建文件d在指定目录c下(xx为上一级目录,这里用的绝对路径)
touch xx/c/d
//编译
make
//编译安装
make install
//静态修改hostname
hostnamectl --static set-hostname 主机名
//查看hostname
hostname
//查询所有安装包 并通过管道 筛选含有xx字符 的 内容xx
rpm -qa | grep xx
//安装xx软件
yum -y install xx
//卸载xx软件(y表示同意,不加y ,系统会询问是否确定卸载)
yum -y remove xx
//解压tar压缩包b,b在xx下的a内,将解压后的文件放在d的e文件夹下
tar -zxvf xx/a/b -C d/e
参数解释:
-z | --gzip | --ungzip 用gzip对存档压缩或解压
-x | --extract | --get 解压文件
-v | --verbose 显示详细处理过程
-f | --file [HOSTNAME:]F 指定文件或设备,该参数后要紧跟要解压的文件
//开机自启xx服务
systemctl enable xx
//启动xx服务
systemctl start xx
//关闭所有交换分区
swapof -a
//关闭selinux
setenforce 0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)