zoukankan      html  css  js  c++  java
  • Kafka系列一之架构介绍和安装

    Kafka架构介绍和安装

    写在前面
    还是那句话,当你学习一个新的东西之前,你总得知道这个东西是什么?这个东西可以用来做什么?然后你才会去学习它,使用它。简单来说,kafka既是一个消息队列,如今,它也演变为一个分布式的流处理平台,这一点就是很厉害的了。所以,学习kafka对于大数据的小伙伴们来说,是非常有益的。
    (一)Kafka概述
    1.Kafka是一个分布式的流处理平台,有消息的订阅系统(订阅之后,一旦有新的消息产生,你就会收到消息),可以以多副本的方式进行存储,可以构建实时数据管道,以及实时的流处理,能够横向水平扩展,容错等特点。大数据的实时流处理场景很多时候都会使用到kafka
    这里写图片描述

    上面是官网中的图片
    Kafka和消息系统类似,消息中间件的一种:有生产者和消费者的概念。

    起源:

    Kafka 是 Apache 基金会开源的一个分布式发布 - 订阅消息中间件,流处理平台。 它起源于 LinkedIn,由 Scala 和 Java两种语言编写而成。于 2011 年成为 Apache 项目,2012 成为 Apache 基金会下顶级项目。

    Kafka 专为分布式高吞吐系统而设计。相比较其他消息中间件,如 RabbitMq 等,Kafka 具有更好的吞吐量,内置分区,复制和固有的容错能力,使得它非常适合应用在大数据领域。另外,Kafka 还支持离线、在线消费消息。

    特性:

    • 低延迟 - Kafka 支持低延迟消息传递,速度极快,能达到 200w 写/秒;
    • 高性能 - Kafka对于消息的发布、订阅都具有高吞吐量。即使存储了 TB 级的消息,依然能够保证稳定的性能;
    • 可靠性 - Kafka 是分布式,分区,复制和容错的,保证零停机和零数据丢失。
    • 可拓展性 - Kafka 支持集群水平拓展。
    • 耐用性 - Kafka 使用"分布式提交日志",消息能够快速的持久化的磁盘上。

    (二)Kafka架构
    这里写图片描述
    从上面官网给出的图片中,我们知道,kafka是有以下几个主要的该丽娜
    1)producer:生产者,

    2)consumer:消费者,

    3)broker:一个broker就是一个kafka,

    4)topic:主题,给生产的消息打上一个标签,代表是谁生产的.

    First a few concepts:[几个概念]
    Kafka is run as a cluster on one or more servers.

    The Kafka cluster stores streams of records in categories called topics.

    Each record consists of a key, a value, and a timestamp.

    (三)Kafka的安装部署
    我们首先来到官网上去,http://kafka.apache.org/quickstart
    从这个快速开始中,知道我们的kafka是依赖于zookeeper的,所以我们第一步来安装zookpeer,然后安装Kafka

    zookeeper的安装

    1. 下载zookeeper,地址在cdh5的页面http://archive.cloudera.com/cdh5/cdh/5/
    2. 解压到自己指定的目录中去,我一般喜欢~/app,这个看自己的习惯就好,这里我把解压后的文件修改名称为zk,
    3. 把解压的目录导出,
    [hadoop@hadoop000 zk]$ vim ~/.bash_profile 
    # .bash_profile
    
    # Get the aliases and functions
    if [ -f ~/.bashrc ]; then
            . ~/.bashrc
    fi
    
    # User specific environment and startup programs
    
    export JAVA_HOME=/home/hadoop/app/jdk1.8.0_144
    export PATH=$JAVA_HOME/bin:$PATH
    
    export FLUME_HOME=/home/hadoop/app/flume
    export PATH=$FLUME_HOME/bin:$PATH
    
    
    export ZK_HOME=/home/hadoop/app/zk
    export PATH=$ZK_HOME/bin:$PATH
    
    #:wq 保存退出
    

    4.再source一个系统环境

    [hadoop@hadoop000 zk]$ source ~/.bash_profile 
    [hadoop@hadoop000 zk]$ 
    

    5.配置zookeeper,来到解压目录下的conf文件
    拷贝一份

    [hadoop@hadoop000 conf]$ cp zoo_sample.cfg zoo.cfg
    [hadoop@hadoop000 conf]$ vim zoo.cfg 
    #修改数据的临时存放目录,默认是在tmp目录下的
    dataDir=/home/hadoop/app/tmp/zk
    #:wq 保存退出
    
    

    6.启动zookeeper

    [hadoop@hadoop000 conf]$ cd ../bin/
    [hadoop@hadoop000 bin]$ zkServer.sh start
    JMX enabled by default
    Using config: /home/hadoop/app/zk/bin/../conf/zoo.cfg
    Starting zookeeper ... already running as process 10943.
    [hadoop@hadoop000 bin]$ 
    
    

    7.查看进程

    [hadoop@hadoop000 bin]$ jps
    27179 Jps
    10943 QuorumPeerMain
    [hadoop@hadoop000 bin]$ 
    #看见QuorumPeerMain,说明就启动成功了
    

    Kafka的安装部署

    按照官网上的指南,我们先下载Kafka,点击官网上面的downloadhttp://kafka.apache.org/downloads 在选择版本的时候,我们推荐使用0.9.0.0版本的,目前这个版本在上产上比较常用,

    1. 下载https://archive.apache.org/dist/kafka/0.9.0.0/kafka_2.11-0.9.0.0.tgz 因为kafka是scala语言写的,后面我们也可能会使用到scala,因为我安装的scala是2.11版本。这个下载的版本主要看自己的情况,在官网上选择合适的就好
    2. 解压到指定目录,再导出到系统环境中‘’
    [hadoop@hadoop000 ~]$ vim ~/.bash_profile 
    # .bash_profile
    
    # Get the aliases and functions
    if [ -f ~/.bashrc ]; then
            . ~/.bashrc
    fi
    
    # User specific environment and startup programs
    
    export JAVA_HOME=/home/hadoop/app/jdk1.8.0_144
    export PATH=$JAVA_HOME/bin:$PATH
    
    export FLUME_HOME=/home/hadoop/app/flume
    export PATH=$FLUME_HOME/bin:$PATH
    
    
    export ZK_HOME=/home/hadoop/app/zk
    export PATH=$ZK_HOME/bin:$PATH
    
    
    export KAFKA_HOME=/home/hadoop/app/kafka
    export PATH=$KAFKA_HOME/bin:$PATH
    
    #:wq保存退出
    

    3.再source一下

    4.配置,修改解压目录下config配置文件

    配置server.properties[需要注意的地方]
    broker.id=0  解释:是kafka,一个broker
    listeners      解释:监听的端口
    host.name    解释:当前机器
    log.dirs       解释:kafka的日志存放目录
    zookeeper.connect  zk的地址
    
    修改好之后,保存退出
    
    

    5.现在,就可以来启动了
    如何启动呢??看官网是如何说的,http://kafka.apache.org/quickstart

    bin/zookeeper-server-start.sh config/zookeeper.properties
    2).再启动我们的kafka
    bin/kafka-server-start.sh config/server.properties

    #启动kafka的命令
    kafka-server-start.sh $KAFKA_HOME/config/server.properties
    

    6.启动之后

    [hadoop@hadoop000 ~]$ jps
    27251 Kafka
    27334 Jps
    10943 QuorumPeerMain
    [hadoop@hadoop000 ~]$ 
    #可以看见Kafka的进程,就对啦
    
    

    好的,到这里我们的kafka就安装完成了,接下来,我们就开始做broker的部署…
    推荐一下:Kafka系列二之部署与使用
    http://blog.csdn.net/liuge36/article/details/78593404

    更多Kafka 相关好文 :https://blog.csdn.net/liuge36/article/category/9392861

    ----------------拓展----- 2019-12-09 (更新)-----------

    
    
    下载地址:
    	Zookeeper:
    	http://mirror.bit.edu.cn/apache/zookeeper/current/
    
    	Scala:
    	http://www.scala-lang.org/download/2.11.8.html
    
    	Kafka:
    	http://kafka.apache.org/downloads
    
    
    一.Zookeeper部署
    	1.下载解压zookeeper-3.4.6.tar.gz
    	[root@hadoop001 software]# tar -xvf zookeeper-3.4.6.tar.gz
    	[root@hadoop001 software]# mv zookeeper-3.4.6 zookeeper
    	[root@hadoop001 software]#
    	[root@hadoop001 software]# chown -R root:root zookeeper
    	2.修改配置
    	[root@hadoop001 software]# cd zookeeper/conf
    	[root@hadoop001 conf]# ll
    	total 12
    	-rw-rw-r--. 1 root root  535 Feb 20  2014 configuration.xsl
    	-rw-rw-r--. 1 root root 2161 Feb 20  2014 log4j.properties
    	-rw-rw-r--. 1 root root  922 Feb 20  2014 zoo_sample.cfg
    	[root@hadoop001 conf]# cp zoo_sample.cfg zoo.cfg
    	[root@hadoop001 conf]# vi zoo.cfg 
    	# 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=/opt/software/zookeeper/data
    
    	# the port at which the clients will connect
    	clientPort=2181
    	# the maximum number of client connections.
    	# increase this if you need to handle more clients
    	#maxClientCnxns=60
    	#
    	# Be sure to read the maintenance section of the
    	# administrator guide before turning on autopurge.
    	#
    	# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
    	#
    	# The number of snapshots to retain in dataDir
    	#autopurge.snapRetainCount=3
    	# Purge task interval in hours
    	# Set to "0" to disable auto purge feature
    	#autopurge.purgeInterval=1
    
    	server.1=hadoop001:2888:3888
    	server.2=hadoop002:2888:3888
    	server.3=hadoop003:2888:3888
    
    	~
    	"zoo.cfg" 36L, 1028C written
    	[root@hadoop001 conf]# cd ../
    	[root@hadoop001 zookeeper]#  mkdir data
    	[root@hadoop001 zookeeper]# touch data/myid
    	[root@hadoop001 zookeeper]# echo 1 > data/myid
    	[root@hadoop001 zookeeper]#
    
    	3.hadoop002/003,也修改配置,就如下不同
    	[root@hadoop001 software]# scp -r  zookeeper 192.168.137.141:/opt/software/
    	[root@hadoop001 software]# scp -r  zookeeper 192.168.137.142:/opt/software/
    
    	[root@hadoop002 zookeeper]# echo 2 > data/myid
    	[root@hadoop003 zookeeper]# echo 3 > data/myid
    
    	###切记不可echo 3>data/myid,将>前后空格保留,否则无法将 3 写入myid文件
    
    	4.启动Zookeeper集群
    	[root@hadoop001 bin]# ./zkServer.sh start
    	[root@hadoop002 bin]# ./zkServer.sh start
    	[root@hadoop003 bin]# ./zkServer.sh start
    
    	5.查看Zookeeper状态
    	[root@hadoop001 bin]# ./zkServer.sh status
    	JMX enabled by default
    	Using config: /opt/software/zookeeper/bin/../conf/zoo.cfg
    	Mode: follower
    	[root@hadoop002 bin]#  ./zkServer.sh status
    	JMX enabled by default
    	Using config: /opt/software/zookeeper/bin/../conf/zoo.cfg
    	Mode: leader
    	[root@hadoop002 bin]# 
    	[root@hadoop003 bin]#  ./zkServer.sh status
    	JMX enabled by default
    	Using config: /opt/software/zookeeper/bin/../conf/zoo.cfg
    	Mode: follower
    	[root@hadoop003 bin]# 
    
    
    	6.进入客户端
    	[root@hadoop001 bin]# ./zkCli.sh 
    	[zk: localhost:2181(CONNECTED) 0] ls /
    	[zookeeper, yarn-leader-election, hadoop-ha, rmstore]
    	[zk: localhost:2181(CONNECTED) 1] 
    	[zk: localhost:2181(CONNECTED) 1] help
    	ZooKeeper -server host:port cmd args
    		stat path [watch]
    		set path data [version]
    		ls path [watch]
    		delquota [-n|-b] path
    		ls2 path [watch]
    		setAcl path acl
    		setquota -n|-b val path
    		history 
    		redo cmdno
    		printwatches on|off
    		delete path [version]
    		sync path
    		listquota path
    		rmr path
    		get path [watch]
    		create [-s] [-e] path data acl
    		addauth scheme auth
    		quit 
    		getAcl path
    		close 
    		connect host:port
    	[zk: localhost:2181(CONNECTED) 2] 
    
    二.Kafka部署
    1.解压并配置Scala
    [root@hadoop001 software]# tar -xzvf scala-2.11.8.tgz
    [root@hadoop001 software]# chown -R root:root scala-2.11.8
    [root@hadoop001 software]# ln -s scala-2.11.8 scala
    
    
    #环境变量
    [root@hadoop001 software]# vi /etc/profile
    export SCALA_HOME=/opt/software/scala
    export PATH=$SCALA_HOME/bin:$PATH
    
    [root@hadoop001 software]# source /etc/profile
    [root@hadoop001 software]# scala
    Welcome to Scala 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_45).
    Type in expressions for evaluation. Or try :help.
    
     
    2.下载基于Scala 2.11的kafka版本为0.10.0.1 
    [root@hadoop001 software]# tar -xzvf kafka_2.11-0.10.0.1.tgz
    [root@hadoop001 software]# ln -s kafka_2.11-0.10.0.1 kafka
    [root@hadoop001 software]# 
    
    3.创建logs目录和修改server.properties
    [root@hadoop001 software]# cd kafka
    [root@hadoop001 kafka]# mkdir logs
    [root@hadoop001 kafka]# cd config/
    [root@hadoop001 config]# vi server.properties
    broker.id=1
    port=9092
    host.name=192.168.137.141
    log.dirs=/opt/software/kafka/logs
    zookeeper.connect=192.168.137.141:2181,192.168.137.142:2181,192.168.137.143:2181/kafka
    
    4.环境变量
    [root@hadoop001 config]# vi /etc/profile
    export KAFKA_HOME=/opt/software/kafka
    export PATH=$KAFKA_HOME/bin:$PATH
    [root@hadoop001 config]# source /etc/profile
    
    5.另外两台机器如上操作
     
    6.启动/停止
    [root@sht-sgmhadoopdn-01 kafka]# nohup kafka-server-start.sh config/server.properties &
    [root@sht-sgmhadoopdn-02 kafka]# nohup kafka-server-start.sh config/server.properties &
    [root@sht-sgmhadoopdn-03 kafka]# nohup kafka-server-start.sh config/server.properties &
    ###停止
    bin/kafka-server-stop.sh
    
    ---------------------------------------------------------------------------------------------------------------------------------------------
    7.模拟实验1
    创建test topic
    bin/kafka-topics.sh --create 
    --zookeeper 192.168.137.141:2181,192.168.137.142:2181,192.168.137.143:2181/kafka 
    --replication-factor 3 --partitions 3 --topic test
    
    
    在一个终端,启动Producer,并向我们上面创建的名称为my-replicated-topic5的Topic中生产消息,执行如下脚本:
    bin/kafka-console-producer.sh 
    --broker-list 192.168.137.141:9092,192.168.137.142:9092,192.168.137.143:9092 --topic test
    
    在另一个终端,启动Consumer,并订阅我们上面创建的名称为my-replicated-topic5的Topic中生产的消息,执行如下脚本:
    bin/kafka-console-consumer.sh 
    --zookeeper 192.168.137.141:2181,192.168.137.142:2181,192.168.137.143:2181/kafka 
    --from-beginning --topic test
    可以在Producer终端上输入字符串消息行,就可以在Consumer终端上看到消费者消费的消息内容。
    
  • 相关阅读:
    spring applicationContext.xml中<beans>中属性概述
    ES6新特性
    JavaWeb工程 目录结构
    web项目目录结构
    关于 eclipse启动卡死的问题 解决方法
    eclipse 僵死/假死 问题排查及解决
    Ajax的text/plain、application/x-www-form-urlencoded和application/json
    js的等值比较规则
    jsp页面中注释 <!-- --> 和<%-- --%> 的区别
    Spring的配置文件ApplicationContext.xml配置头文件解析
  • 原文地址:https://www.cnblogs.com/liuge36/p/12614842.html
Copyright © 2011-2022 走看看