1.kafka环境搭建:

kafka是一个分布式消息系统,由LinkedIn使用Scala编写,用作LinkedIn的活动流(Activity Stream)和运营数据处理管道(Pipeline)的基础,具有高水平扩展和高吞吐量。

(1)zookeeper环境部署:

kafka是由zookeeper管理的,那么kafka的部署需要在zookeeper安装好之后进行。

安装zookeeper到指定的目录里:

tar -zxvf zookeeper-3.4.8.tar.gz
mv zookeeper-3.4.8 /usr/local/zookeeper
#然后进入查看文件
cd /usr/local/zookeeper

bin目录下是运行文件,conf目录下是配置文件,因此看看conf目录。里面有一个配置例子zoo_sample.cfg,我们借助这个来配置:

cp zoo_sample.cfg zoo.cfg

用vim进入zoo.cfg,看看里面的内容:

#可以看到配置文件里面有几个参数
tickTime      # 是zookeeper中使用的基本时间单位, 毫秒值. 
initLimit      # 连接leader的超时时间
syncLimit    # 
dataDir      # 数据目录. 可以是任意目录. 
clientPort    # 监听client连接的端口号.

如果是单机运行zookeeper的话,就用上面默认的配置就可以了,可以把dataDir给改了,不让它存在临时目录:

# 我把它改到存在zookeeper目录下的data目录
dataDir=/usr/local/zookeeper/data

然后进入zookeeper目录创建data目录:

cd /usr/local/zookeeper
mkdir data
cd data

# 创建一个myid文件
vim myid

如果说是使用在集群环境中,就需要在zoo.cfg中还要加上如下内容(假如说有三台):对于复制模式,至少需要三台服务器,强烈建议您使用奇数台服务器。如果您只有两台服务器,那么您会遇到这样的情况:如果其中一台出现故障,则没有足够的机器来形成多数法定人数。两台服务器本质上不如一台服务器稳定,因为有两个单点故障。

tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888

新条目initLimit是 ZooKeeper 用来限制仲裁中的 ZooKeeper 服务器必须连接到领导者的时间长度的超时。条目syncLimit限制了服务器与领导者之间的过期时间。

对于这两种超时,您可以使用tickTime指定时间单位。在此示例中,initLimit 的超时为 5 个滴答,每滴答 2000 毫秒,即 10 秒。

server.X表单的条目列出了组成 ZooKeeper 服务的服务器。当服务器启动时,它通过在数据目录中查找文件myid来知道它是哪个服务器。该文件包含 ASCII 格式的服务器编号。

最后,注意每个服务器名称后面的两个端口号:“2888”和“3888”。对等点使用前一个端口连接到其他对等点。这种连接是必要的,这样对等方可以进行通信,例如,就更新顺序达成一致。更具体地说,ZooKeeper 服务器使用此端口将追随者连接到领导者。当一个新的领导出现时,一个跟随者使用这个端口打开一个到领导者的 TCP 连接。因为默认的leader选举也使用TCP,所以我们目前需要另一个端口来选举leader。这是服务器条目中的第二个端口。

如果你想在一台机器上测试多个服务器,指定服务器名称为本地主机具有独特的群体和地区领导人选举端口(即2888:3888,2889:3889,2890:3890在上面的例子),该服务器中的每个server.X配置文件。当然,单独的 _dataDir_s 和不同的 _clientPort_s 也是必要的(在上面的复制示例中,在单个localhost上运行,您仍然会有三个配置文件)。

请注意,在一台机器上设置多个服务器不会产生任何冗余。如果发生某些事情导致机器死机,那么所有的 Zookeeper 服务器都将处于离线状态。完全冗余要求每个服务器都有自己的机器。它必须是一个完全独立的物理服务器。同一物理主机上的多个虚拟机仍然容易受到该主机完全故障的影响。

如果您的 ZooKeeper 机器中有多个网络接口,您还可以指示 ZooKeeper 绑定到您的所有接口上,并在网络出现故障时自动切换到健康的接口。

集群环境下需要将zookeeper拷贝到各个结点上:

scp -r -r zookeeper/  

然后就可以运行zookeeper了(每一个节点都要运行哦):

bin/zkServer.sh start

#可以用jps查看:
QuorumPeerMain是否运行

(2)Kafka的环境搭建:

zookeeper搭建完毕后,就可以开始kafka的部署了。

首先是单机版的:

解压文件,然后将它移动到合适的文件夹中,一般放/usr/local中:

tar -xvf kafka_2.11-0.9.0.1.tgz
mv kafka_2.11-0.9.0.1 /usr/local/kafka-0.9.0.1

接着进入相应目录:

cd /usr/local/kafka-0.9.0.1

目录结构还是那么个结构,大同小异,以名字来看,bin也是执行目录,config就是配置文件的目录了。

因此可以得知,我们需要进行配置kafka。

那么就来配置一下,一般来说就配置config目录下的server.properties。

vim config/server.properties

主要涉及到集群中的配置。比如broker.id、zookeeper.connect等等,单机就默认的就行了,默认broker.id=0。如果有其他的节点,每台节点的broker.id不能一样哦。

然后就可以启动kafka了,同样在bin里面。在启动了zookeeper的情况下启动kafka:

bin/kafka-server-start.sh config/server.properties

启动后可以来测试测试,打开另一个终端,创建一个叫“hello”的topic:

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic hello

查看一下topic列表:

bin/kafka-topics.sh --list --zookeeper localhost:2181

到目前为止,我们一直在与一个经纪人竞争,但这并不好玩。对于 Kafka 来说,单个代理只是一个大小为 1 的集群,因此除了启动更多代理实例之外没有什么变化。但只是为了感受一下,让我们将集群扩展到三个节点(仍然都在我们的本地机器上)。

> cp config/server.properties config/server-1.properties
config/server-1.properties:
    broker.id=1
    listeners=PLAINTEXT://:9093
    log.dirs=/tmp/kafka-logs-1
    
> cp config/server.properties config/server-2.properties
config/server-2.properties:
    broker.id=2
    listeners=PLAINTEXT://:9094
    log.dirs=/tmp/kafka-logs-2

作者:Deere.x
本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。
文章对你有所帮助的话,欢迎给个赞或者 star ,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐