linux服务器编程环境安装中的坑附加详细安装步骤(三)

2023-05-16

编程环境

  • 九、搜索优化
      • ElasticSearch
  • 十、分布式
      • Zookeeper
        • 离线下载
        • 解压
        • 文件结构
        • 自定义配置
          • 修改数据存放目录
            • 修改客户端端口号
        • 启动
        • 坑1
        • 坑2
  • 十一、消息队列
      • 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

文件结构

解压完成后我们需要看几个文件

  1. 肯定是apache-zookeeper-3.6.1-bin(刚刚解压得到的文件)目录下的README
    在这里插入图片描述
    里面介绍了zookeeper的官网和wiki,最关键的是说了对java版本的要求,比如这里说如果要使用java1.8来编译,应该使用u211或者更新的版本
    在这里插入图片描述
    说有的文档都放在docs文件夹中了
    在这里插入图片描述
  2. bin目录下的文件
    bin目录可以说是整个文件的核心,目录结构如下
    在这里插入图片描述
    这里我们又看到了熟悉的README,内容如下
    在这里插入图片描述
    这里给出了不同的系统的Zookeeper服务的对应脚本
    unixcygwin 可以使用.sh
    msdoswindows 可以是用 .cmd
  3. conf目录(配置文件目录)
    这个目录包含所有关于zookeeper的配置信息
    目录结构如下
    在这里插入图片描述
    这里的zoo_sample.cfg需要注意,cfg后缀的一般为服务的重要配置,内容如下
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true

默认开启的配置如下

  • 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.

原因是什么呢?

  1. 首先先确定集群是否正常运行
    这个在linux服务器编程环境安装中的坑附加详细安装步骤(二)说的很详细了
//查看节点状态(正常状态 为Ready)
kubectl get nodes
//状态为Running
kubectl get pods --namespace=kube-system
  1. 查看zookeeper状态
 ./zkServer.sh status
  1. 查看日志
    xxx为hostname
cat /usr/local/zookeeper/apache-zookeeper-3.6.1-bin/logs/zookeeper-root-server-xxx.out
  1. 查看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)
在这里插入图片描述

  1. 通过命令行
rabbitmqctl set_user_tags 用户名 权限
  1. 通过管理页面
    在这里插入图片描述
    在这里插入图片描述
    管理页面的功能还是挺全面的
    在这里插入图片描述

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服务开启停止
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或脱机数据仓库系统中来进行脱机处理和报告,并且通过集群机来提供实时的消费。

适用场景:

  1. 构造实时流数据管道来获取数据
  2. 构建实时流式应用程序来进行流处理

基本概念:

  1. Kafka作为一个集群,运行在一台或者多台服务器上
  2. Kafka 通过 topic 对存储的流数据进行分类
  3. 每条记录中包含一个key,一个value和一个timestamp(时间戳)
    这个时间戳的概念就来自于日志,因为日志的记录被追加到日志的末尾,并且读取从左到右进行,记录的顺序定义了“时间”的概念,因为左边的条目定义为比右边的条目更早,每条记录有其唯一的顺序日志条目号,该日志条目号可以认为是该条目的“时间戳”。
    日志还被称为预写日志、提交日志或事务日志,在不了解日志的情况下,无法完全理解数据库,NoSQL存储,键值存储,复制,paxos,hadoop,版本控制

四个核心的API:

  1. The Producer API
    允许一个应用程序发布一串流式的数据到一个或者多个Kafka topic。

  2. The Consumer API
    允许一个应用程序订阅一个或多个 topic ,并且对发布给他们的流式数据进行处理。

  3. The Streams API
    允许一个应用程序作为一个流处理器,消费一个或者多个topic产生的输入流,然后生产一个输出流到一个或多个topic中去,在输入输出流中进行有效的转换。

  4. 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(使用前将#替换为@)

linux服务器编程环境安装中的坑附加详细安装步骤(三) 的相关文章

  • X11 模式对话框

    如何使用 Xlib 在 X11 中创建模式对话框 模态对话框是一个位于应用程序其他窗口之上的窗口 就像瞬态窗口一样 并且拒绝将焦点给予应用程序的其他窗口 在 Windows 中 当试图从模态窗口夺取焦点时 模态也会通过闪 烁模态窗口的标题栏
  • 使用 inotify 的正确方法是什么?

    我想使用inotifyLinux 上的机制 我希望我的应用程序知道文件何时aaa被改变了 您能给我提供一个如何做到这一点的示例吗 文档 来自监视文件系统活动 inotify https developer ibm com tutorials
  • 从c调用汇编函数

    我试图从 c 调用汇编函数 但我不断收到错误 text globl integrate type integrate function integrate push ebp mov esp ebp mov 0 edi start loop
  • 这种 bash 文件名提取技术有何用途?

    我有一部分 bash 脚本正在获取不带扩展名的文件名 但我试图了解这里到底发生了什么 是做什么用的 有人可以详细说明 bash 在幕后做了什么吗 如何在一般基础上使用该技术 bin bash for src in tif do txt sr
  • Fortran 中的共享库,最小示例不起作用

    我试图了解如何在 Linux 下的 Fortran 中动态创建和链接共享库 我有两个文件 第一个 liblol f90 看起来像这样 subroutine func print lol end subroutine func 我用它编译gf
  • 未找到 Gem 命令

    我已经在 Ubuntu 10 10 32 位上安装了 gem apt get install gem y 但当我尝试跑步时 gem install something gem 我收到未找到命令的错误 bash gem command not
  • 使用 gcc 理解共享库

    我试图理解 C 中共享库的以下行为 机器一 cat one c include
  • 在 Linux 上创建线程与进程的开销

    我试图回答在 python 中创建线程与进程有多少开销的问题 我修改了类似问题的代码 该问题基本上运行一个带有两个线程的函数 然后运行带有两个进程的相同函数并报告时间 import time sys NUM RANGE 100000000
  • 如何设置Java线程的CPU核心亲和力?

    我搜索了以前关于类似主题的帖子 但找不到合适的答案 因此提出这个问题 非常感谢您帮助回答 我知道在 Linux 中通过任务集命令设置进程与特定 CPU 核心的关联性 但我想设置 Java 线程与特定 cpu 核心的亲和力 以便属于同一进程的
  • 将node.js +expressjs应用程序的NODE_ENV设置为ubuntu下的守护进程

    我按照这些说明让守护进程正常工作 http kevin vanzonneveld net techblog article run nodejs as a service on ubuntu karmic http kevin vanzon
  • 用于读取文件的 Bash 脚本

    不知道为什么最后一行没有从脚本中删除 bin bash FILENAME 1 while read line do cut d f2 echo line done lt FILENAME cat file 1 test 2 test 3 t
  • ubuntu 的 CSS 更少(并且自动编译)? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我尝试过 simples 但现在 l
  • 使用 ProcessBuilder 运行 shell 脚本

    我正在尝试使用 Java 和 ProcessBuilder 运行脚本 当我尝试运行时 我收到以下消息 error 2 没有这样的文件或目录 我不知道我做错了什么 但这是我的代码 ps 我尝试只执行不带参数的脚本 错误是相同的 String
  • 使用c在linux上分块读写

    我有一个 ASCII 文件 其中每一行都包含一个可变长度的记录 例如 Record 1 15 characters Record 2 200 characters Record 3 500 characters Record n X cha
  • 在 Linux 控制台中返回一行?

    我知道我可以返回该行并用以下内容覆盖其内容 r 现在我怎样才能进入上一行来改变它呢 或者有没有办法打印到控制台窗口中的特定光标位置 我的目标是使用 PHP 创建一些自刷新的多行控制台应用程序 Use ANSI 转义码 http en wik
  • 为什么docker容器提示“权限被拒绝”?

    我使用以下命令来运行 docker 容器 并从主机映射目录 root database 到容器 tmp install database docker run it name oracle install v root database t
  • 运行 shell 命令并将输出发送到文件?

    我需要能够通过 php 脚本修改我的 openvpn 身份验证文件 我已将我的 http 用户设置为免通 sudoer 因为这台机器仅在我的家庭网络中可用 我目前有以下命令 echo shell exec sudo echo usernam
  • 为什么 call_usermodehelper 大多数时候都会失败?

    从内核模块中 我尝试使用 call usermodehelper 函数来执行可执行文件 sha1 该可执行文件将文件作为参数并将文件的 SHA1 哈希和写入另一个文件 名为输出 可执行文件完美运行 int result 1 name hom
  • 查找并删除超过 x 天的文件或文件夹

    我想删除超过 7 天的文件和文件夹 所以我尝试了 17 07 14 email protected cdn cgi l email protection find tmp mindepth 1 maxdepth 1 ctime 7 exec
  • 如何通过不同的接口路由 TCP/IP 响应?

    我有两台机器 每台机器都有两个有效的网络接口 一个以太网接口eth0和 tun tap 接口gr0 目标是使用接口在机器 A 上启动 TCP 连接gr0但然后让机器 B 的响应 ACK 等 通过以太网接口返回 eth0 因此 机器 A 发出

随机推荐

  • ubuntu中各个文件夹的作用

    Ubuntu的根目录的文件夹各个含义 home xff1a 家目录 xff0c 所有普通用户都有一个以自己名字命名的文件夹存放在这个目录中 普通用户登录ubuntu默认进入的就是家目录中自己的文件夹 xff0c 可用pwd命令查看 xff0
  • 【CUDA】Ubuntu系统如何安装CUDA保姆级教程(2022年最新)

    本期目录 Linux安装CUDA Linux安装CUDA 输入以下命令 xff0c 查看 GPU 支持的最高 CUDA 版本 笔者这里显示的是 11 6 xff0c 这意味着 xff0c 安装的 CUDA 版本必须 lt 61 11 6 n
  • AVI视频格式分析-封装格式

    AVI视频封装格式分析 使用的工具RIFF块CHUNK块LIST块hdrl LISTavih CHUNKstrl LISTstrh CHUNKstrf CHUNK JUNK CHUNKmovi LISTidx1 CHUNK 使用的工具 el
  • 2014.10.10

    1 主要是制作了suse镜像 xff0c 但是还存在很多问题 xff0c 没有加上默认网关 xff0c 我很不开心 xff0c 根目录没有扩展 2 了解了下 boot from image 通过glance上传一个镜像 xff0c 然后通过
  • 2014.10.11

    我只想骂csdn xff01 截图直接粘过来居然不能直接显示出来 xff01 xff01 xff01 妈蛋 xff01 xff01 1 suse镜像制作完善 xff0c 根目录未扩展这是个大问题 xff0c 默认网关没加上 所谓的根目录扩展
  • 2014.10.12

    早晨8点就起了 xff0c 然后匆匆奔向wx xff0c 为了思念的人 xff0c 吃了个中午饭 xff0c 感觉还不错 xff0c 下午回来之后又去了wpj xff0c 胡扯一通 xff0c 而且发现现在家里人的注意力完全放在我的情感生活
  • vmware 下安装 red hat 9,dos 以及wmware tools

    1 安装vmware vmware 版本 7 11 282343 英文原版下载 xff1a http dl sh ctc 2 pchome net 03 lt VMware workstation full 7 1 1 282343 rar
  • 关于上财陈畅的俄罗斯方块的学习

    最近同学学习C xff0c 想做一个大练习 xff0c 于是选择了俄罗斯方块 xff0c 我 xff0c 计算机专业在校学生 xff0c 说实话理论还行 xff0c 实践动手能力很差 xff0c 同学让我先做 xff0c 然后给他讲讲怎样一
  • xrdp开源项目的代码分析

    最近我的博客将重新恢复更新 xff0c 从2012年3月份起 xff0c 我开始参与某公司的堡垒机项目的研发工作 xff0c 堡垒机又叫内控堡垒机 xff0c 运维审计系统 xff0c 相信不少人也听说过 xff0c 目前电信 xff0c
  • xrdp开源项目的代码分析-1

    首先要说明情况 xff0c 我分析的代码基于xrdp 2012 5 11日 xff0c 而不是最新的代码 xff0c 最新的代码稍有改动 xff0c 但是主体的思想没有变化 xrdp 2012 5 11日代码的下载地址 xff1a http
  • 穿山甲的投放小技巧(账户如何快速过冷启动期)

    1 300 xff08 出价 xff1a 目标成本的2 3倍出价 xff09 xff0c 看成本 2 600 xff08 出价 xff1a 300预算时的一半 xff09 xff0c 看成本 3 放到日满格预算 xff08 出价 xff1a
  • C++加入库dll

    加入头文件加入 include 34 MES inc MES2Interface h 34 pragma comment lib 34 MES lib MES2Interface lib 34 MES2Interface dll 复制到运行
  • 结构体的大小如何计算

    我们实际生活中 xff0c 保存的数据一般不会是同一种类型 xff0c 所以引入了结构体 而结构体的大小也不是成员类型大小的简单相加 需要考虑到系统在存储结构体变量时的地址对齐问题 由于存储变量地址对齐的问题 xff0c 结构体大小计算必须
  • flatpak安装的firefox视频播放卡顿的解决方案

    最近在debian系统中使用flatpak安装最新版的firefox后发现 xff0c firefox在播放视频时十分卡顿 xff0c 经过四处搜索 xff0c 终于找到了解决方案 How to use hardware accelerat
  • NodeBB 安装部署 Linux(阿里云 CentOS 6.3 Redis NodeJS)

    网上有很多 xff0c 写的都不完整 xff0c 我尽量给大家一个完整的 基于Linux 阿里云 CentOS 6 3 安装 NodeBB 论坛 1 先安装NodeJs 安装方式有多种 xff0c 有通过下载源代码编译的 xff0c 有下载
  • shell脚本使用字符串截取报Bad substitution错误的原因即解决方法

    shell脚本使用字符串截取报Bad substitution错误的原因即解决方法 绝大多是是因为解释器的问题 第一步 使用命令查看你指令那个解释器 span class token function ls span bin sh al 我
  • Android播放器(一) 通过FFmpeg解码为RGBA格式播放

    代码可以参考 xff1a Github地址 本文主要介绍如何通过FFmpeg将MP4格式的视频数据解码为一帧一帧的RGBA像素格式数据来播放 因为主要是视频的解码及播放 xff0c 对于音频只是解码出了音频对应的pcm数据 xff0c 并没
  • 终于把(白嫖)阿里ESC服务器搞到手了(方法会写在文章中)

    我这里就讲讲 我购买并搭建服务器的过程和这个过程让我疑惑的点和我最后解决的方案 什么是阿里云 一 阿里云包括什么 xff1f 二 什么是ESC服务器 xff1f 1 1 弹性计算1 1 1 弹性就是 嘿嘿嘿 xff0c 你懂的1 1 2 计
  • kube-flannel.yaml

    官网对kube flannel yml的解释 adds the cni version to the cni conf yaml inside the kube flannel cfg xff08 把cui版本加入kube flannel
  • linux服务器编程环境安装中的坑附加详细安装步骤(三)

    编程环境 九 搜索优化ElasticSearch 十 分布式Zookeeper离线下载解压文件结构自定义配置修改数据存放目录修改客户端端口号 启动坑1坑2 十一 消息队列RabbitMQKafka安装下载解压目录结构site docs目录b