Kafka入门简介

1. Kafka概述

Kafka® is used for building real-time data pipelines and streaming apps. It is horizontally scalable, fault-tolerant, wicked fast, and runs in production in thousands of companies.

这是Kafka官网里的一段介绍,从这段话,我们可以知道,kafka在构建实时数据管道和streaming应用中被常使用,它可以横向扩展,容错,快速地运行在数以千计的公司产品上。

它可以像消息系统一样读写数据流,并且可以在实时业务的场景中写可靠的流处理应用,并且能安全地存储数据流到分布式、多副本、容错的集群中。所以通俗点理解,可以说Kafka就是一个消息中间件。

Kafka场景比喻

接下来我大概比喻下Kafka的使用场景

消息中间件:生产者和消费者

妈妈:生产者
你:消费者
馒头:数据流、消息
正常情况下: 生产一个 消费一个
其他情况:

  • 1)一直生产,你吃到某一个馒头时,你卡主(机器故障), 馒头就丢失了
  • 2)一直生产,做馒头速度快,你吃来不及,馒头也就丢失了

为了防止其他生产情况的出现,我们可以拿个碗/篮子,馒头做好以后先放到篮子里,你要吃的时候去篮子里面取出来吃,而这篮子/框就可以为:Kafka。
当篮子满了,馒头就装不下了,咋办? 多准备几个篮子 === Kafka的扩容

2. Kafka的架构和核心概念

在这里插入图片描述
这是张Kafka官网上截的图,大概可以把Kafka的主要结构分为以下几点:

  • producer:生产者,就是生产馒头(老妈)
  • consumer:消费者,就是吃馒头的(你)
  • broker:篮子
  • topic:主题,给馒头带一个标签,topic a的馒头是给你吃的,topic b的馒头是给你弟弟吃

另外,我们在看下官网上的这段解释:

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.
可以看出来:

  • 1.Kafka可以作为集群运行在一台或者多个服务器上面;
  • 2.Kafka集群可以分类地存储记录流,以打标签的方式,就是采用topics,每个broker可以打个topic,这样能保证消费者可以根据topic选择性消费;
  • 3.每个记录由Key、Value、timestamp构成。

3. Kafka的快速使用

Kafka使用到了zookeeper,所以首先你得安装zookeeper再安装kafka。

3.1 安装zookeeper

下载ZK,安装

# 解压
tar -zxvf apache-zookeeper-3.5.6-bin.tar.gz 
# 配置zk环境变量
vi ~/.bash_profile 
#在.bash_profile 文件中加入以下内容
export ZK_HOME=/opt/apache-zookeeper-3.5.6
export PATH=$ZK_HOME/bin:$PATH

#配置生效
source ~/.bash_profile 

#修改zk配置文件
cd conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
# zoo.cfg文件中修改zk数据目录
dataDir=/opt/tmp/zk

# 新建数据目录
mkdir -p /opt/tmp/zk

# 启动zk
cd /bin
./zkServer.sh start

# 连接zk
 ./zkCli.sh 

可能遇到的坑

  • 启动时报错:找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain,缺少jar包,下载带名称bin的安装包。

3.2 单节点的broker部署

下载kafka,选择对应的版本,这里选择0.9.0.0的kafka_2.11-0.9.0.0.tgz ,下载后解压

# 解压
tar -zxvf kafka_2.11-0.9.0.0.tgz 
#配置环境变量
vi ~/.bash_profile
export KAFKA_HOME=/opt/kafka_2.11-0.9.0.0
export PATH=$KAFKA_HOME/bin:$PATH
source ~/.bash_profile 

首先我们需要修改$KAFKA_HOME/config/server.properties这个配置文件,主要以下几处需要修改:

broker.id=0,每个broker的ID需要唯一
listeners:监听的端口(此处笔者设置的是默认端口9092)
host.name:当前机器
log.dirs:存储日志的文件夹

num.partitions:分区的数量
zookeeper.connect:zookeeper的地址(默认为localhost:2181)

这几处根据你自身需要进行配置,然后启动步骤如下:

  • 1)开启zookeeper,此处需要注意的是zookeeper的conf目录下的zoo.cfg配置文件,主要修改的也是日志存储目录那块。

  • 2)启动Kafka,命令为:kafka-server-start.sh $KAFKA_HOME/config/server.properties

  • 3)创建topic,需要指定zookeeper,命令为:kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic hello_topic。 注意指定zookeeper,后面几个属性可以根据你实际情况进行定义。另外查看所有topic的命令为:kafka-topics.sh --list --zookeeper localhost:2181

  • 4)发送消息,需要指定broker,命令为:kafka-console-producer.sh --broker-list localhost:9092 --topic hello_topic

  • 5)消费消息,需要指定zookeeper,命令为:kafka-console-consumer.sh --zookeeper localhost:2181 --topic hello_topic --from-beginning。意思就是指定zookeeper上的topic进行消费,from-beginning的设置,可以查看之前的消息。

3.3 单节点多broker部署

主要是增加多个server.properties文件,一个配置文件就相当于一个broker,就设置三个broker,复制3个server.properties:

#进入目录
cd $KAFKA_HOME/config
#拷贝
server-1.properties
	log.dirs=/opt/tmp/kafka-logs-1
	listeners=PLAINTEXT://:9093
	broker.id=1
 
server-2.properties
	log.dirs=/opt/tmp/kafka-logs-2
	listeners=PLAINTEXT://:9094
	broker.id=2
 
server-3.properties
	log.dirs=/opt/tmp/kafka-logs-3
	listeners=PLAINTEXT://:9095

然后依次开启,命令如下:

kafka-server-start.sh -daemon $KAFKA_HOME/config/server-1.properties &
kafka-server-start.sh -daemon $KAFKA_HOME/config/server-2.properties &
kafka-server-start.sh -daemon $KAFKA_HOME/config/server-3.properties &

创建topic

kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic
 
kafka-console-producer.sh --broker-list localhost:9093,localhost:9094,localhost:9095 --topic my-replicated-topic
kafka-console-consumer.sh --zookeeper localhost:2181 --topic my-replicated-topic

4. Kafka容错性测试

查看一下my-replicated-topic这个topic的相关信息

kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逍遥俊子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值