精选文章 分布式-kafka消息队列学习(一)——基本原理/集群环境搭建

分布式-kafka消息队列学习(一)——基本原理/集群环境搭建

作者:V瑞 时间: 2019-11-04 11:19:48
V瑞 2019-11-04 11:19:48

1.简介与应用场景

(1)什么是kafka

是分布式 发布-订阅 消息传递系统。是一种快速、可扩展、设计本身就是分布式的,分区和可复制的提交日志服务(没有遵守JMS规范,只提供了发布和订阅通讯方式)

应用场景:日志收集、普通MQ

和其他MQ主要区别:有分区的思想

(2)kafka优点

高吞吐、低延迟——每秒可以处理几十万条数据,最低延迟只有几毫秒,每个topic可以分为多个partition,consumer group 对partition进行consume操作

可扩展性—————kafka集群支持热扩展

持久性、可靠性——消息被持久化到本地磁盘,并且支持数据备份,防止数据丢失

容错性——————允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)

高并发——————支持数千个客户端同时读写

(3)相关名称

Broker:kafka节点(服务器的意思),一个节点就是一个broker,多个broker可以组成一个kafka集群

Topic:一类消息,消息存放的目录(主题),例如page view日志、click日志等都可以以topic的形式存在。kafka集群能够同时负责多个topic的分发

message:kafka中最基本的传递对象

Partition:topic物理上的分组(分区的概念,均摊)。一个topic可以分为多个parttition,每个partition是一个有序的队列

Segment:parttition物理上的分组。parttition物理上有多个segment组成,每个Segment存着message信息

(Topic——>Partition——>Segment——>message)

Producer:生产者,生产message发送到topic

Consumer:消费者,订阅topic 并消费message,consumer作为一个线程来消费

Consumer Group:消费者组,一个Consumer Group包含多个consumer

Offset:偏移量(可理解为消息partition中的索引)

分布式-kafka消息队列学习(一)——基本原理/集群环境搭建1

(4)kafka存储策略

1.kafka以topic来进行消息管理,每个topic包含多个partition,每个partition对应一个逻辑log,有多个segment组成

2.每个segment中存储多条消息,消息id由其逻辑位置决定,从消息id可直接定位到消息的存储位置,避免id到位置的额外映射

3.每个part在内存中对应一个index,记录每个segment中的第一条消息偏移

4.发布者发到某个topic的消息会被均匀的分布到多个partition上,broker收到发布消息往对应partition的最后一个segment上添加该消息,当某个segment上的消息条数达到配置值或消息发布时间超过阈值时,segment上的消息会被flush到磁盘,只有flush到磁盘上的消息订阅者才能订阅到,segment达到一定的大小后将不会再往该segment写数据,broker会创建新的segment

2.kafka集群原理

分布式-kafka消息队列学习(一)——基本原理/集群环境搭建2

说明:0,1,2,3,4,5,6哪些是偏移量(索引)

原理图:

分布式-kafka消息队列学习(一)——基本原理/集群环境搭建3

3.kafka高可用集群环境搭建

(1)服务器环境准备

使用vm虚拟三个linux主机

192.168.212.174

192.168.212.175

192.168.212.176

(2)Zookeeper集群环境搭建

1.每台服务器节点上安装jdk1.8环境

 使用java-v命令测试

2.每台服务器节点上安装Zookeeper

1.下载并且安装zookeeper安装包
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
2. 解压安装包
tar -zxvf zookeeper-3.4.10.tar.gz
3. 重命名
重命名: mv zookeeper-3.4.10 zookeeper

3.搭建Zookeeper集群环境

修改zoo_sample.cfg文件

cd /usr/local/zookeeper/conf
mv zoo_sample.cfg zoo.cfg
修改conf: vi zoo.cfg 修改两处
(1) dataDir=/usr/local/zookeeper/data(注意同时在zookeeper创建data目录)
(2)最后面添加
server.0=192.168.212.174:2888:3888
server.1=192.168.212.175:2888:3888
server.2=192.168.212.176:2888:3888

4.创建服务器标识

服务器标识配置:
创建文件夹: mkdir data
创建文件myid并填写内容为0: vi
myid (内容为服务器标识 : 0)

5.复制zookeeper

进行复制zookeeper目录到hadoop01和hadoop02
还有/etc/profile文件
把hadoop01、 hadoop02中的myid文件里的值修改为1和2
路径(vi /usr/local/zookeeper/data/myid)

关闭每台服务器节点防火墙,systemctl stop firewalld.service

6.启动zookeeper

启动zookeeper:
路径: /usr/local/zookeeper/bin
执行: zkServer.sh start
(注意这里3台机器都要进行启动)
状态: zkServer.sh status(在三个节点上检验zk的mode,一个leader和俩个follower)

(3)Kafka集群环境搭建

1.3台虚拟机均进行以下操作:

// 解压下载好的kafka压缩包并重命名
cd /usr/local
wget http://mirror.bit.edu.cn/apache/kafka/1.0.0/kafka_2.11-1.0.0.tgz 
tar -zxvf kafka_2.11-1.0.0.tgz
mv kafka_2.12-0.11.0.0 kafka
// 修改配置文件
vi ./kafka/config/server.properties

2.需要修改的内容如下(192.168.212.169)

broker.id=0
listeners=PLAINTEXT://192.168.131.130:9092
zookeeper.connect=192.168.131.130:2181,192.168.131.131:2181,192.168.131.132:2181

3.需要修改的内容如下(192.168.212.170)

broker.id=1
listeners=PLAINTEXT://192.168.212.170:9092
zookeeper.connect=192.168.131.130:2181,192.168.131.131:2181,192.168.131.132:2181

4.需要修改的内容如下(192.168.212.171)

broker.id=2
listeners=PLAINTEXT://192.168.212.171:9092
zookeeper.connect=192.168.131.130:2181,192.168.131.131:2181,192.168.131.132:2181

5.在系统环境中配置kafka的路径 vi /etc/profile

// 在文件最下方添加kafka路径
export KAFKA_HOME=/usr/local/kafka
// 多路径PATH写法为PATH=${ZOOKEEPER_HOME}/bin:${KAFKA_HOME}/bin:$PATH
PATH=${KAFKA_HOME}/bin:$PATH
export PATH

6.使修改完的环境变量生效

source /etc/profile
192.168.212.169:2181,192.168.212.172:2181,192.168.212.173:2181

(4)Kafka集群环境测试

1、开启3台虚拟机的zookeeper程序

/usr/local/zookeeper/bin/zkServer.sh start 
开启成功后查看zookeeper集群的状态 
/usr/local/zookeeper/bin/zkServer.sh status 
出现Mode:follower或是Mode:leader则代表成功 

2、在后台开启3台虚拟机的kafka程序(cd /usr/local/kafka)

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

3、在其中一台虚拟机(192.168.131.130)创建topic

/usr/local/kafka/bin/kafka-topics.sh –create –zookeeper 192.168.131.130:2181 –replication-factor 3 –partitions 1 –topic my-replicated-topic 

4、 查看创建的topic信息

/usr/local/kafka/bin/kafka-topics.sh –describe –zookeeper 192.168.131.130:2181 –topic my-replicated-topic

 

勿删,copyright占位
分享文章到微博
分享文章到朋友圈

上一篇:linux下如何把php升级到5.6

下一篇:互联网公司的中台到底是什么

CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。