kafka是一个分布式消息系统,由LinkedIn使用Scala编写,用作LinkedIn的活动流(Activity Stream)和运营数据处理管道(Pipeline)的基础,具有高水平扩展和高吞吐量。
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是否运行
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 ,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习