码迷,mamicode.com
首页 > 其他好文 > 详细

Kafka集群搭建

时间:2019-09-28 10:36:44      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:进入   example   架构   apache   ISE   下载   路由   连接   master   

原文地址

kafka初识

1.Kafka使用背景

在我们大量使用分布式数据库,分布式计算集群的时候,是否会遇到这样的一些问题

  • 我们想分析下用户行为(pageviews),以便我们设计出更好的广告位
  • 我想对用户的搜索关键词进行统计,分析出当前的流行趋势
  • 有些数据,存储数据库浪费,直接存储硬盘效率又低
这些场景都有一个共同点:数据是由上游模块产生,使用上游模块的数据计算,统计,分析,这个时候就可以使用消息系统,尤其是分布式消息系统。

2.Kafka的定义

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

Zookeeper是一种在分布式系统中,被广泛用来作为:分布式状态管理,分布式协调管理,分布式配置管理和分布式锁服务的集群。kafka增加和减少服务器都会在Zookeeper节点上触发相应的事件kafka系统会捕获这些事件,进行新一轮的负载均衡。

Kafka相关概念

1.AMQP协议

Advanced Message Queuing Protocol(高级消息队列协议)

The Advanced Message Queuing Protocol(AMQP):是一个标准开放的应用层的消息中间件(Message Oriented Middleware)协议。AMQP定义了通过网络发送的字节流的数据格式。因此兼容性非常好,任何实现AMQP协议的程序都可以和AMQP协议兼容的其他程序交互,可以很容易做到跨语言,跨平台。

2.一些基本的概念

1.消费者(Consumer):从消息队列中请求消息的客户端应用程序

2.生产者(Producer):向broker发布消息的应用程序

3.AMQP服务器(broker):用来接收生产者发送消息并将这些消息路由给服务器中的队列,便于kafka将生产者发送的数据,动态的添加到磁盘病给每一条消息一个偏移量,所以对于Kafka一个broker就是一个应用程序的示例,可以使用以上任何一种语言和kafka服务器进行通信(即可以编写自己的consumer从kafka集群订阅消息也可以自己写producer程序)

3.Kafka架构

主题(topic):一个主题类似新闻中的体育,娱乐,教育等分类概念,在实际工程中通常一个业务一个主题

分区(Partition):一个Topic中的消息数据按照多个分区组织,分区时kafka消息队列组织的最小单位,一个分区可以看作是一个FIFO(First Input First Output的缩写,先入先出队列)的队列。

kafka分区是提高kafka性能的关键所在,当你发现你的集群性能不高时,常用手段就是增加topic的分区,分区里面的消息是按照从新到老的顺序进行组织的,消费者从队列头订阅消息,生产者从队列尾添加消息。

技术图片

备份(Replication):为了保证分布式可靠性,kafka0.8开始对每个分区的数据进行备份(不同的broker上)防止其中一个Broker宕机照成分区上的数据不可用。

Zookeeper集群搭建

Kafka集群时把状态保存在Zookeeper中的,首先要搭建Zookeeper集群

1.软件环境

10.108.101.210 master

10.108.103.137 slave1

10.108.100.59 slave2

1.linux服务器一台,三台,五台(2*n+1)Zookeeper集群的宫缩时超过半数才能对外提供服务,3台中超过两台超过半数,允许1台挂掉,是否可以用偶数,其实没必要。

2.Java jdk1.8 zookeeper时用java写的所以他的需要Java环境,java时运行在java虚拟机上的

3.Zookeeper的稳定版

2.配置&安装zookeeper

1.安装Jdk

2.下载Zookeeper

#统一放在/opt下面
#首先创建Zookeeper项目目录
mkdir zookeeper  #项目目录
mkdir zkdata  #存放快照日志
mkdir zkdatalog  #存放事务日志

下载Zookeeper

#下载软件
cd /opt/zookeeper
wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
#解压软件
tar -zxvf zookeeper-3.4.6.tar.gz

3.修改配置文件

进入到解压好的目录里面的conf目录中,查看

#进入conf目录
/opt/zookeeper/zookeeper-3.4.6/conf
#查看 ll
-rw-rw-r--. 1 1001 1001  535 8月  23 15:39 configuration.xsl
-rw-rw-r--. 1 1001 1001 2161 8月  23 15:39 log4j.properties
-rw-r--r--. 1 root root 1013 1月  15 2017 zoo.cfg
-rw-rw-r--. 1 1001 1001  922 8月  23 15:39 zoo_sample.cfg

zoo_sample.cfg 这个文件是官方给我们的zookeeper的样板文件,给他复制一份命名为zoo.cfg,zoo.cfg是官方指定的文件命名规则

3台服务器的配置文件

# 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=/home/zookeeper-3.4.9/data
# the port at which the clients will connect
clientPort=12181
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

配置文件解释

#tickTime
这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳
#initLimit
这个配置项是用来配置Zookeeper接受客户端(这里所说的客户端不是用户连接Zookeeper服务器的客户端,而是Zookeeper服务器集群中连接到Leader的Follower服务器)初始化连接时最长能忍受多少个心跳时间间隔数,当已经超过5个心跳的时间(也就是tickTime)长度后Zookeeper服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败,总的时间长度就是5*2000=10秒
#syncLimit
这个配置项标识Leader与Follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是5*2000=10秒
#dataDir
快照日志的存储路径
#dataLogDir
事务日志的存储路径,如果不配置这个那么事务日志会默认存储到dataDir制定的目录,这样会严重影响zk的性能,当zk的吞吐量较大的时候,产生的事务日志,快照日志太多
#clientPort
这个端口就是客户端连接Zookeeper服务器的端口,Zookeeper会监听这个端口,接受客户端的请求访问,修改他的端口改大点

创建myid文件

#server1
echo "1" > /home/zookeeper-3.4.6/data/myid
#server2
echo "2" > /home/zookeeper-3.4.6/data/myid
#server3
echo "3" > /home/zookeeper-3.4.6/data/myid

4.重要配置说明

1.myid文件和server.myid在快照目录下存放的标识本台服务器的文件,他时整个zk集群用来发现彼此的一个重要标识

2.zoo.cfg文件时zookeeper配置文件在conf目录里

3.log4j.properties文件是zk的日志输出文件,在conf目录里用java写的程序基本上有个共同点日志都用log4j来进行管理

4.zkServer.sh:主要管理程序文件 zkEnv.sh:是zookeeper集群启动时配置环境变量的文件

5.Zookeeper server not remove old snapshots and log files when using the default configuration(see autopurge below),this is the responsibility of the operator zookeeper不会主动的清除旧的快照和日志文件,这个是操作者的责任

5.启动服务并查看

1.启动服务

#进入到zookeeper的bin目录下
cd /opt/zookeeper/zookeeper-3.4.6/bin
#启动服务(三台机子都需要操作)
./zkServer.sh start

2.检查服务状态

#检查服务器状态
./zkServer.sh status

通过status就能看到状态

./zkServer.sh status
JMX enabled by default
Using config:/opt/zookeeper-3.4.6/bin/../conf/zoo.cfg  #配置文件
Mode:follower  #他是否为领导

zk集群一般只有一个leader,多个follower,主一般是相应客户端的读写请求,而主从同步数据,当主挂掉之后就会从follower里投票选举一个leader出来

可以用jps查看zk的进程,这个zk的整个工程的main

#执行命令jps
20348 Jps
4233  QuorumPeerMain

Kafka集群搭建

1.软件环境

  • linux一台或多台,大于等于2
  • 已经搭建好的zookeeper集群
  • 软件版本kafka_2.11-0.10.1.0.tgz

2.创建目录并下载安装软件

#创建目录
cd /opt/
mkdir kafka
cd kafka
mkdir kafkalogs #创建kafka消息目录,主要存放kafka消息

#下载软件
wget http://apache.opencas.org/kafka/0.10.1.0/kafka_2.11-0.10.1.0.tgz

#解压软件
tar -zxvf kafka_2.11-0.10.1.0.tgz

3.修改配置文件

进入到config目录

cd /opt/kafka/kafka_2.11-0.10.1.0/config/

主要关注:server.properties这个文件即可,我们可以发现在目录下:有很多文件,这个可以发现有Zookeeper文件,我们可以根据Kafka内带的zk集群来启动,但是建议使用独立的zk集群

实际的修改项为:

#broker.id=1   每台服务器的broker.id都不相同

#hostname
listeners=PLAINTEXT://master:9092

log.dirs=/opt/kafka_2.11-0.10.1.0/kafkalogs/

#在log.retention.hours=168 下面新增下面三项
message.max.byte=5242880
default.replication.factor=2
replica.fetch.max.bytes=5242880

#设置zookeeper的连接端口
zookeeper.connect=master:12181,slave1:12181,slave2:12181

4.启动Kafka集群并测试

1.启动服务

#从后台启动kafka集群(3台都需要启动)
cd /opt/kafka/kafka_2.11_0.10.1.0/bin   #进入到kafka的bin目录
./kafka-server-start.sh -daemon ../config/server.properties

2.检查服务是否启动

#执行命令jps
20348  Jps
4233   QuorumPeerMain
18991  Kafka

3.创建Topic来验证是否创建成功

更多请看官方文档:http://kafka.apache.org/documentation.html

#创建topic
./kafka-topics.sh --create -zookeeper master:12181 --replication-facotor 1 --replications 1 --topic test

#解释
--replication-facotor 1 #复制两份
--partitions 1 #创建1个分区
--topic 主题为test

#在一台服务器上创建一个发布者
./kafka-console-producer.sh --broker-list master:9092 --topic test

#在一台服务器上穿件一个订阅则

./kafka-console-consumer.sh --zookeeper localhost:12181 --topic test --from-beginning

#查看topic
./kafka-topics.sh --list --zookeeper master:12181

测试(在发布者那里发布消息看看订阅者那里是否能正常收到)

原文:大专栏  Kafka集群搭建


Kafka集群搭建

标签:进入   example   架构   apache   ISE   下载   路由   连接   master   

原文地址:https://www.cnblogs.com/petewell/p/11601745.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!