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

Linux系统DHCP服务器的安装与配置详细步骤 文章目录前言一、确定DHCP服务器的主机上是否安装了DHCP服务器软件包二、复制案例文件覆盖“/etc/dhcp/dhcpd.conf”总结 前言 DHCP作用: 用于为用户分配: 网卡的IP地址,子网掩码 对应的网络地址、广播地址 缺省网关地址 首选和候选DNS服务器的地址 在Linux环境下安装和配置DHCP服务器 并使用客户机进行验证 windows更新DHCP租约:ipcongfig /renew 一、确定DHCP服务器的主机上是否安装了DHCP服务器软件包 rpm -qa|grep dhcp 阅读详情


因为文章太长了,所以博主分了三节来讲

九、搜索优化

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服务的对应脚本
    unix和cygwin 可以使用.sh
    msdos和windows 可以是用 .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


【Ai】dify:Linux环境安装 dify 详细步骤 Dify 是一个开源的大语言模型(LLM)应用开发平台,旨在帮助开发者快速构建基于 AI 的应用程序,例如智能对话助手、知识库问答、内容生成工具等。它提供了可视化的流程编排、模型集成、数据管理等功能,降低了开发门槛,支持快速迭代和部署。集成主流 LLM(如 GPT-4、Claude、Llama 等),支持通过 API 或本地部署的模型,可灵活切换不同模型。可视化工作流,知识库与 RAG 阅读详情

相关推荐

Linux下安装Prometheus详细步骤

Prometheus服务环境搭建 首先我们需要准备3台服务器: 初始化服务器 IP地址、hostName主机名称、绑定Hosts文件、时间同步(非常重要) 服务器名 IP 主机名称 描述 promrtheus服务器 192.168.31.10 promrtheus.jus.cn 被监控(agent)服务器 192.168.31.11 agent.jus.cn LB、Web...

qq_28417845的博客 5891

linux安装失败解决

第一:注意UEFI格式强制安装要么让他自动分区要么把/boot换成UEI; 第二:双显卡要禁用显卡 按e之后再linux一行后把 – 删除,输入空格、输入nomodeset按F10进入。

郭育培的博客 1342

【CTFhub】——hate_php2021

【CTFhub】——hate_php2021

manerzi的博客 1605

Python私有化部署之代码安全设计

在私有化部署Python项目时,代码泄露是一个主要风险。本文探讨了如何通过将Python代码编译成二进制文件并结合Docker部署来降低这一风险。首先,使用Nuitka将Python代码编译为可执行文件,隐藏源码。然后,将编译后的文件嵌入Docker镜像中,进一步保护代码。此外,还设计了一个基于机器MAC地址和有效期的授权机制,确保只有授权用户可以在特定时间内使用软件。这种方法不仅提高了代码的安全性,还简化了跨平台的部署流程。

qq_34481955的博客 1145

SQL注入:联合查询的三个绕过技巧

在SQL注入中,可以利用科学计数法来绕过对输入的限制。例如,可以使用科学计数法来绕过对字符串长度的限制,通过将字符串拆分成多个部分并使用科学计数法来表示。此外,还可以利用数据库的特定特性或语法来替代原始的查询语句,从而执行联合查询或其他恶意操作。另外,还可以尝试利用无列名注入的技巧,通过在原始查询中使用通配符或其他方式来绕过对列名的限制,从而执行恶意操作。

qq_68163788的博客 3792

MIPI video mode 和 command mode 的区别

1、何为LCD RAM? LCD 是指字面意思是液晶显示屏(Liquid Crystal Display), 而RAM: 随机存取存储器(Random-Access Memory),两者完全是风马牛不相及的东西。 下图是一个标准的LCD的爆炸图(不含TP),请注意图中红色mark的地方:控制IC-- LCD的大脑。所谓的LCD RAM自然是指此大脑是否包含RAM. 题外话<不感兴趣的...

精诚所至 4690

[MySQL] 解决办法: Error: Transaction test error: file /etc/my.cnf from install of mysql-community-server

但是这是一个全新的Linux8,正常没有安装过MySQL也没有安装过Mariadb,所以猜测是该Linux机器内嵌集成了该Mariadb包,可以看到执行查找的时候,在系统中有内嵌两个mariadb包。从错误信息中看,是冲突了,因为错误信息中有写。在安装MySQL过程中出现错误。:本文原创由 bluetata。、转载请务必注明出处。

我在山城重庆,我希望能为这片软件沙漠地带贡献自己的一滴水,Stay tuned! 8107

【Niagara Vykon N4 】物联网学习 03照明控制及照明时间表

3.1 设计思路 3.2逻辑组件添加 ①依据原有控制照明逻辑,打开palette,找到schedule模块,添加BoolenSchedule。 ②打开kitContrl,找到Util,并添加BoolenSwitch。 ③剪切到原有的逻辑线,并进行逻辑连接,如下图。 ④新建BooleanWritable,命名为Switch,设置参数并进行逻辑连接,若下图。 3.3界面设计 ⑤至此完成了逻辑的设...

weixin_45217107的博客 2863

yum update错误Transaction Check Error解决方式

在网上查看了yum update引起错误Transaction Check Error的情况可能有多种,我这里只讲述我遇到的情况: 在我执行yum update时的报错信息如下: Running Transaction Test Transaction Check Error: file /usr/share/locale/en/LC_MESSAGES/systemtap.mo f

Dyan的专栏 2万+

pandas教程:2012 Federal Election Commission Database 2012联邦选举委员会数据库

里面包含了支持者的名字,职业和雇主,地址,赞助金额。我们可以已经能想到如何切割、整理数据,来提取赞助者的统计数据,或提取宣传活动的模式,这里我们展示一些不同的分析方法。可以看到有些职业是同一种工作类型,指代的是同一个东西。这两个连续操作是分别独立执行的,一个结束后,另一个才开始。上,这里我是把数据集压缩成了ZIP格式,解压后能正常导入)。我觉得也有必要好好了解一下,这个网站做了很好的讲解,),所以我们最好添加这样的信息。这样的情况,即把两个索引操作连在一起。,发现映射关系被正常执行了,所以这里的。

Cachel Wood的博客 349

Python控制Keysight DAQ973A/DAQ970A实现数据采集

本文介绍了如何通过编程实现Keysight DAQ973A数据采集系统的自动化温度测量。首先,通过GPIB线将PC与仪器连接,并使用热电耦测量线连接被测装置。接着,通过查阅Keysight官网提供的编程手册,获取了实现温度测量所需的SCPI指令。然后,使用pyvisa库编写代码,与仪器进行交互,发送SCPI指令并读取测量结果。代码中整合了配置和查询指令,并将测量结果转换为浮点数格式。最后,将整个流程封装为命令行工具,用户可以通过配置文件设置参数,并执行自动化测试,测试结果将保存为CSV文件。整个过程实现了温

xgh1951的博客 1887

06 - DockerFile 学习

1.Dockerfile简介 Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于操作系统(centos或者Ubuntu)基础镜像并最终创建的一个新镜像。 我们前面通过手工方式,修改配置文件,或者添加、删除文件目录的方式,来构建一种新镜像;这种手工方式麻烦,容易出错,而且不能复用。 这里的讲的Docker用脚本方式来构建自动化,可复用的,高效率的创建镜像方式,是企业级开发的首选方式; 再软件系统开发生命周期中,采用Dockerfile来构...

航行博客 352

从数据读取到业务事件:理解 ABAP CDS 视图的目的与选型(含 RAP、扩展与分析场景)

CDS视图在SAP S/4HANA中不仅是数据查询工具,更是语义模型和运行时能力的载体。它通过分层架构(基础视图、组合视图、消费视图等)实现数据复用与场景适配,支持UI、分析、事务处理等多样化消费。视图类型包括提供数据访问的接口视图(I_前缀)、消费视图(C_前缀)和事务视图,以及不提供数据访问的扩展视图。这种分层设计确保了数据模型的稳定性与扩展性,同时支持自定义字段和上下文感知分析。正确理解CDS视图的用途和分层规则,能帮助开发者构建更健壮、可维护的SAP应用。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 302

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

服务器编程环境中的坑 七、服务器编排(集群开发)Kubernetes 八、缓存Redis

Slow down your pace 1644

【论文复现】——基于NDT与ICP结合的点云配准算法(matlab版)

基于NDT与ICP结合的点云配准算法matlab版

点云侠的博客 490

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

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

服务器编程环境中的坑 一、Linux 二、编译环境Java、Node、Python 三、数据库Mysql 四、代码管理Git、Maven 五、web服务器Tomcat、Nginx 六、项目部署Docker

Slow down your pace 749

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Linux安装Nginx(超详细步骤)

1,进入官网下载Nginx资源: 官网下载:http://nginx.org/en/download.html 2,资源下载(因为是在Linux安装,所以我下载Linux安装的资源包,版本你们随意) 3,资源下载好之后,上传到Linux上(位置自己随意,我是上传到了/home/myqxin/java) 4,将资源进行解压,然后进入到解压后的目录 解压命令 # 解压到当前目录下 tar -zxvf 资源包 截图如下: 5,配置基本信息,命令如下 #配置configure --prefix 代表安装的

qq_45752401的博客 10万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Linux安装Python详细步骤

编译安装python3.6的步骤 1.下载python3源码包 wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tgz 2.下载python3编译的依赖包 yum install -y gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel g

Codeooo 博客 1万+

Linux中安装jdk详细步骤

本篇文章讲解了在Linux系统下安装jdk,图文结合,通俗易懂,适合新手小白

m0_62946761的博客 1万+

从零开始搭建Linux服务器开发运行环境-详细步骤

大家好,久违了! 时隔一年,我发表的上一篇博客年后第一更,谈谈收获及展望至今已快一年了,期间一直在忙没有时间写博客,原因就不细说了。由于我的个人云服务器到期了,所以我又买了一台阿里云的一年时长的ECS云服务器。话不多说,切入正题,跟我一起从零开始,搭建Linux服务器的各种开发运行环境吧。 目录 一、linux安装jdk环境 1.下载jdk 2.配置jdk环境变量 二、linux安装p...

林晓风的博客 1万+

服务器上用U盘安装Linux系统详细步骤

1.重启服务器,按F11进入“Boot Menu”界面(如图1,2,3所示); 图1    图2    图3  2.按上线箭头键选择“Generic USB Boot”,按回车键(如图4所示);   图4  3.按上线箭头键选择“Install CentOS 7”,按回车键(如图5所示);   图5  4.输入命令“cd dev”,回车,   输入命令“ls”,回车,找...

Eppley的博客 7万+

U盘安装Linux详细步骤

工具/原料1.CentOS 7.4 ISO镜像2.8G U盘一个制作Linux启动U盘首先准备好大于的8G U盘一个,因为现在的镜像基本上都有3G多,4G的U盘可能空间不够。同时提前下载好CentOS 7.4的安装镜像以及刻录镜像到U盘上的软件UltraISO。如下图所示:打开UltraISO后,它的操作界面如下图所示,点击左上角的文件,然后再点打开。选择我们刚才展示的CentOS 7.4 安装镜...

hanxh7的博客 4万+

Linux中安装JDK详细步骤

接下来会弹出SSH安全警告框,点击接受之后需要输入Linux的用户名和密码。命令来让文件立即生效(我就是因为这一步漏了,还以为到最后了又出个bug)进入官网下载对应的JDK,下载之前需要先登录 官网地址 ->执行完上述代码之后,出现以下情况(是因为执行上述代码需要root用户)首先使用vim打开etc目录下的profile文件 -->命令切换到root用户,需要输入当前用户的密码。查看JDK版本,此时JDK的安装九搞定了!切换完毕再执行上述代码,如图所示。登录成功后,找到对应的下载位置。

程序猿的博客 1万+

【Linux编程】手把手教你搭建Linux编程环境

Linux编程环境搭建有两套方案。 关于这两套方案我都会做详细的讲解,以便帮助大家减少Linux编程学习的 障碍。 方案一:云服务器 + Xshell 这种方案就是将我们的Linux操作机部署在云服务器上面,然后通过Xshell在自己的电脑上操纵Linux机器。 优点:Linux环境部署简单、后期维护成本低、可以随便瞎折腾、不用担心整崩了(推荐) 缺点....

大家好我叫张同学 7714

Linux安装jdk的详细步骤

使用命令解压: tar -xvf jdk-8u341-linux-x64.tar.gz。2、发现有输入:rpm -qa | grep java 检测jdk的安装包,3、接着进行一个个删除包,输入:rpm -e --nodeps +包名。4、最后再次:rpm -qa | grep java检查是否删除完即可。我这里是放在了/home目录下,也推荐放在/usr/local目录下。1、输入:java -version,查看当前是否有jdk版本。输入:source /etc/profile。

写博客是为了记笔记 1万+

Linux安装nginx详细步骤

Linux中安装配置Nginx

adaizzz的博客 3万+
上一篇: kube-flannel.yaml
下一篇: 成功开发Android app-2(项目基本组成)
IT_Joliu
博客等级 码龄9年 32粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值