Kafka入门介绍、安装部署

1、前言

本章节使用的是Apache Kafka,版本:kafka_2.11-2.1.0.tgz;但是实际工作中要考虑CDH环境,使用的是CDH官网的Kafka,所以这里先简单介绍下,如何集成到CDH中,请参考博客:
https://blog.csdn.net/greenplum_xiaofan/article/details/97677328
版本选择:使用的是CDH版本的Kafka,在CDH官网上叫做CDK。
比如:
kafka_2.11-0.10.2-kafka-2.2.0.jar
kafka_2.11::表示scala-2.11版本
0.10.2: 指在apache上的 kafka版本
2.2.0: 这个才是CDH官网上的CDK版本
CDK地址:
https://www.cloudera.com/documentation/kafka/latest/topics/kafka_packaging.html#concept_fzg_phl_br
在这里插入图片描述
Apache Kafka地址:
http://kafka.apache.org/

SparkStraming2.4.2版本官网推荐:apache kafka版本至少0.10.x及以上。
Kafka 0.8和0.10是个分水岭,对比如下(来自Spark官网):
在这里插入图片描述
可以看出0.10版本,只有Direct DStream,不再支持Receiver DSstream;Offset维护在Kafka中。

2、Kafka基本概念

kafka是一个高吞吐的分布式消息系统,一般充当消息中间件,一般是跟流式处理挂钩的,比如SparkStreaming。
Kafka的三个角色:

  • Broker:Kafka集群中server节点,负责读写请求,存储消息,管理分区,无主从关系,依赖zk协调
  • Producer:生产者,负责生产消息,比如从Flume获取数据
  • Consumer:消费者,负责消费消息,比如被SparkStreaming、Flink消费

Kafka这三个角色和Flume的三个角色非常类似,但Flume启动后只有一个进程,而Kafka每个角色都需要启动,有三个进程。

Kafka其他重要概念:

  • Topic:主题,消息的分类,支持一个topic多个消费者消费
  • Partition:分区,一个Topic由一个或多个分区组;一般情况下多少个Kafka节点就设置多少分区数
  • Replication:副本,一个分区数据复制多少份
  • Consumer Group:消费者组,一个消费组可以包含一个或多个消费者,对于同一个Topic数据消费者组里面的每个消费者消费部分数据,而且每个消费者消费的数据是不同的。
  • Offset:偏移量,消费一个分区数据时数据所在的下标,从0开始

3、Kafka安装

我们这里采用的是单节点安装,集群安装一样的,举一反三。

3.1 安装Zookeeper

Kafka需要依赖Zookeeper,zookeeper-3.4.5-cdh5.7.0.tar.gz下载地址(cdh版的)
http://archive.cloudera.com/cdh5/cdh/5/zookeeper-3.4.5-cdh5.7.0.tar.gz

#先瞅一眼文件目录
[hadoop@vm01 ~]$ ll
total 12
drwxrwxr-x. 12 hadoop hadoop 4096 Aug  9 09:42 app
drwxrwxr-x.  6 hadoop hadoop 4096 Aug  8 16:59 data
drwxrwxr-x.  2 hadoop hadoop   32 Aug  1 13:26 lib
drwxrwxr-x.  3 hadoop hadoop   23 Jul 30 03:18 maven_repo
drwxrwxr-x.  3 hadoop hadoop 4096 Aug  9 07:41 software
drwxrwxr-x.  3 hadoop hadoop   24 Jul 30 03:18 source
#解压
[hadoop@vm01 software]$ tar -zxvf zookeeper-3.4.5-cdh5.7.0.tar.gz  -C ../app/
[hadoop@vm01 conf]$ cd ../app/zookeeper-3.4.5-cdh5.7.0
[hadoop@vm01 zookeeper-3.4.5-cdh5.7.0]$ mkdir data dataLog

#配置zoo.cfg
[hadoop@vm01 conf]$ cd conf
[hadoop@vm01 conf]$ cp zoo_sample.cfg zoo.cfg
[hadoop@vm01 conf]$ vi zoo.cfg
...
dataDir=/home/hadoop/app/zookeeper-3.4.5-cdh5.7.0/data
dataLogDir=/home/hadoop/app/zookeeper-3.4.5-cdh5.7.0/dataLog

server.1=vm01:2888:3888
#如果是集群就添加节点在下一行,2888是zk之间的通信,3888是zk跟其他应用程序通信
#server.2=vm02:2888:3888
#server.3=vm03:2888:3888
#配置myid文件,上面的server.1 就是myid,不同节点myid是不同的
#zk集群在刚开始启动的时候,就是根据myid来选举的
[hadoop@vm01 data]$ pwd
/home/hadoop/app/zookeeper-3.4.5-cdh5.7.0/data

[hadoop@vm01 data]$ echo "1" >myid
#配置环境变量
[hadoop@vm01 conf]$ vi ~/.bash_profile 
export ZOOKEEPER_HOME=/home/hadoop/app/zookeeper-3.4.5-cdh5.7.0/
export PATH=$ZOOKEEPER_HOME/bin:$PATH

[hadoop@vm01 conf]$ source ~/.bash_profile 
#启动zk
[hadoop@vm01 bin]$ ./zkServer.sh start
JMX enabled by default
Using config: /home/hadoop/app/zookeeper-3.4.5-cdh5.7.0/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

[hadoop@vm01 bin]$ ./zkServer.sh status
JMX enabled by default
Using config: /home/hadoop/app/zookeeper-3.4.5-cdh5.7.0/bin/../conf/zoo.cfg
Mode: standalone
#因为是单节点,就是这个模式
#如果是集群,那么是一个leader,多个flower。

#查看进程
[hadoop@vm01 bin]$ jps
36505 QuorumPeerMain

3.2 安装Kafka

#解压
[hadoop@vm01 software]$ tar -zxvf kafka_2.11-2.1.0.tgz -C ../app/
[hadoop@vm01 kafka_2.11-2.1.0]$ mkdir kafkaLog/

#配置server.properties
[hadoop@vm01 config]$ pwd
/home/hadoop/app/kafka_2.11-2.1.0/config

[hadoop@vm01 config]$ vi server.properties
broker.id=0
host.name=vm01
port=9092
listeners=PLAINTEXT://vm01:9092
log.dirs=/home/hadoop/app/kafka_2.11-2.1.0/kafkaLog
zookeeper.connect=vm01:2181/kafka  #kafka元数据信息存到ZK的/kafka目录下
#集群是这样子 zookeeper.connect=vm01:2181,vm02:2181,vm03:2181/kafka

#配置环境变量
[hadoop@vm01 config]$ vi ~/.bash_profile 
export KAFKA_HOME=/home/hadoop/app/kafka_2.11-2.1.0
export PATH=$KAFKA_HOME/bin:$PATH

[hadoop@vm01 config]$ source ~/.bash_profile 

3.3 Kafka启动、测试

克隆两个窗口,一共三个窗口,第一个启动Kafka-Server,一直开启,工作中把他放到后台执行
第二个窗口,先创建Topic,然后模拟Producer生产者;第三个窗口,模拟Consumer消费者。

#第一个窗口 启动server
[hadoop@vm01 bin]$ pwd
/home/hadoop/app/kafka_2.11-2.1.0/bin
[hadoop@vm01 bin]$ ./kafka-server-start.sh  ../config/server.properties
#第二个窗口 producer
[hadoop@vm01 bin]$ ./kafka-topics.sh \
--create \
--zookeeper vm01:2181/kafka \
--partitions 1 \
--replication-factor 1 \
--topic ruozedatag6

#查看
[hadoop@vm01 bin]$ ./kafka-topics.sh --list --zookeeper vm01:2181/kafka
ruozedatag6

#启动Producer
[hadoop@vm01 bin]$ ./kafka-console-producer.sh \
> --broker-list vm01:9092 \
> --topic ruozedatag6
>
#第三个窗口 启动consumer
[hadoop@vm01 bin]$ ./kafka-console-consumer.sh \
> --bootstrap-server vm01:9092 \
> --topic ruozedatag6 \
> --from-beginning  #这个代表重头开始消费,比如再一次启动消费端,会重头开始读取topic的数据

注意项:

  • 对于消费者,kafka中有两个设置的地方:对于老的消费者,由–zookeeper参数设置;对于新的消费者,由–bootstrap-server参数设置。
  • 如果使用了–zookeeper参数,那么consumer的信息将会存放在zk之中。
  • 查看的方法是使用./zookeeper-client,然后 ls /consumers/[group_id]/offsets/[topic]/[broker_id-part_id],这个是查看某个group_id的某个topic的offset。
  • 如果使用了–bootstrap-server参数,那么consumer的信息将会存放在kafka之中。
#查看进程
[hadoop@vm01 bin]$ jps
38707 ConsoleConsumer
36854 Kafka
36505 QuorumPeerMain
38126 ConsoleProducer

生产端输入 hadoop
在这里插入图片描述
消费端立马就接受到信息
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章