kafka的简介及安装

Kafka的概述

1.1 消息队列的简介

1.1.1 为什么要有消息队列

1. 当服务器在一次性处理大量的数据时,可能会造成服务器瘫痪,或者数据丢失这种情况
2. 如果将要处理的数据先维护在一个缓存系统中,然后再慢慢的处理,这样就可以避免上述情况。
3. 缓存系统就是用来存储消息的,该系统中至少要维护一个用来存储消息的先后顺序的队列(数据结构)
4. 为什么要使用队列(Queue,Deque,LinkedList),而不是其他的数据结构(Arraylist),因为消息要进行频繁的生产和消费(增删操作)

1.1.2 什么是消息队列

消息,就是指的网络中传输的数据,比如行为日志,文本、视频,音频、图片
队列,用来存储消息的容器,该容器是一个首尾相接的环形队列,规定的是FIFO

消息队列就是两者的结合,以及提供了各种API,和底层优化设计的应用程序

1.1.3 消息队列的分类

主要分为两大类,一类是点对点模式,一类是发布/订阅模式

1)点对点模式

1. 可以叫  peer-to-peer  ,也可以叫point-to-point
2. 角色分为:消息队列(Queue)、发送者(Sender)、接收者(Receiver)
3. 发送者发送消息到队列中,该消息只能被一个接收者所接受,即使有多个接收者同时侦听到了这一条消息。
4. 该消息一旦被消费,则不存储在消息队列中,比如打电话
5. 支持异步/同步操作

2)发布/订阅模式

1. 叫 pub/sub模式
2. 角色分为: 
	-- 消息队列(Queue),
	-- 发布者(Publisher、也叫producer)、
	-- 订阅者(Subscriber,也叫consumer),
	-- 主题(Topic)     用来将消息分类的
3. 一个消息可以被多个消费者消费,互不影响,比如我发布一个微博:关注我的人都能够看到。
4. 消费者在消费数据时,
	--可以是push模式(消息队列主动将信息push给消费者),
	--也可以使pull模式(消费者主动拉取消息对列中的消息),该模式的优点,消费者可以在自己处理消息的能力范围内,进行消费数据,
5. 支持异步/同步操作

1.1.4 消息队列的应用场景

1. 解耦:  消息系统可以作为中间件,  下游的软件和上游的软件无需了解彼此
2. 冗余:  消息可以持久化到磁盘上,或者做备份处理,避免数据丢失
3. 扩展:  消息队列提供了统计的生产者/消费者接口,
          任何软件都可以调用生产者接口API,作为生产者
          软件软件都可以调用消费者接口API,作为消费者
4. 销(削)峰能力:避免流量高峰期造成的系统瘫痪, 消息队列可以缓存这一时期的数据,慢慢处理
5. 可靠性:  消息队列中部分数据丢失,是有副本策略的,可以恢复数据

1.1.5 常见的消息队列系统

RabbitMQ
Redis
ZeroMQ
ActiveMQ JMS
Kafka/Jafka
MetaQ/RocketMQ

1.2 Kafka的简介

1.2.1 Kafka的官网介绍

apache官网:https://kafka.apache.org/documentation/#quickstart
中文官网:https://kafka.apachecn.org/

1.2.2 Kafka是什么

1. 是一个分布式、用于处理消息的发布/订阅消息系统
2. 是用scala语言编写的(scala编写另外一门比较火的框架是spark)
3. 具有以下特点:
	-- 高吞吐量: 可以满足每秒百万级别消息的生产和消费——生产消费。
	-- 持久化(保存在磁盘上一定时间,默认7天,区别于永久性)
	-- 分布式:基于分布式的扩展和容错机制;Kafka的数据都会复制到几台服务器上。当某一台故障失效时,生产者和消费者转而使用其它的机器——整体
	-- 健壮性:稳定,API接口的通用

二、Kafka的架构与安装
2.2.1 安装步骤

步骤1)上传、解压、更名、配置环境变量

[root@qianfeng01 ~]# tar -zxvf kafka_2.11-1.1.1.tgz -C /usr/local/
[root@qianfeng01 local]# cd /usr/local/
[root@qianfeng01 local]# mv kafka_2.11-1.1.1/ kafka
[root@qianfeng01 local]# ll kafka/
drwxr-xr-x 3 root root  4096 7月   7 2018 bin
drwxr-xr-x 2 root root  4096 7月   7 2018 config
drwxr-xr-x 2 root root  4096 10月 28 14:40 libs
-rw-r--r-- 1 root root 28824 7月   7 2018 LICENSE
-rw-r--r-- 1 root root   336 7月   7 2018 NOTICE
drwxr-xr-x 2 root root    44 7月   7 2018 site-docs

[root@qianfeng01 kafka]# vim /etc/profile
#spark environment
export KAFKA_HOME=/usr/local/kafka
export PATH=$KAFKA_HOME/bin:$PATH
[root@qianfeng01 kafka]# source /etc/profile

步骤2)修改server.properties

[root@qianfeng01 kafka]# cd config
[root@qianfeng01 config]# vim server.properties

# 每个节点的唯一标识符的配置
broker.id=0
# 设置消息的存储位置,如果有多个目录,可以用逗号隔开
log.dirs=/usr/local/kafka/data
# 设置zookeeper的集群地址,同时指定kafka在zookeeper上的各个节点的父znode
zookeeper.connect=qianfeng01:2181,qianfeng02:2181,qianfeng03:2181/kafka




# 下面属性可以改可不改
# 发送消息的缓存大小,100K
socket.send.buffer.bytes=102400
# 接收消息的缓存大小,100K
socket.receive.buffer.bytes=102400
# 服务端处理发送过来的数据的最大字节数 100M
socket.request.max.bytes=104857600
# 消息对应的文件保留的时间,默认使7天
log.retention.hours=168
# 消息对应的文件的最大字节数,1G
log.segment.bytes=1073741824
# 用来检查消息对应的文件是否过期或者是大于1G的时间周期,默认是300秒一检查
log.retention.check.interval.ms=300000

步骤3)同步到其他节点上

-- 同步kafka
[root@qianfeng01 local]# scp -r kafka/ qianfeng02:/usr/local/
[root@qianfeng01 local]# scp -r kafka/ qianfeng03:/usr/local/

--同步环境变量文件
[root@qianfeng01 local]# scp /etc/profile  qianfeng02:/etc/
[root@qianfeng01 local]# scp /etc/profile  qianfeng03:/etc/

步骤4)修改其他节点上的brokerId

# 第二台机器上的kafka
broker.id=1


# 第三台机器上的kafka
broker.id=2

2.2.2 启动操作

1. 先启动zookeeper
      三个zookeeper都要启动, 可以调用自己编写的脚本:myzkServer.sh 
      myzkServer.sh start
      myzkServer.sh status
      myzkServer.sh stop
      
2. 再启动kafka, 注意,三台都要启动.  可以调用自己编写的脚本:mykafka.sh 

	mykafka.sh  start
	mykafka.sh  stop

启动kafka的脚本(mykafka.sh)

#!/bin/bash



show(){
        echo -e "\033[0;37;44m"$1"\033[00m"
}

case $1 in

start)
for i in qianfeng01 qianfeng02 qianfeng03
do
show "--------------- $i ---------------"
ssh $i> /dev/null 2>&1 << eof
/usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties
exit
eof
echo "    $i kafka已启动  "
done
;;

stop)
for i in qianfeng01 qianfeng02 qianfeng03
do
show "--------------- $i ---------------"
ssh $i '/usr/local/kafka/bin/kafka-server-stop.sh'
echo "   $i kafka已经关闭 "
done
;;
esac

模仿这个脚本

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值