一、Kakfa介绍
1.1Kafka是什么?
Kafka一个高吞吐量的分布式发布订阅消息系统。
1.2Kafka干什么?
从官网中我们了解到Kafka主要有两类应用
1)实时流处理管道,相当于message queue,作为消息中间件,目前被广泛使用
2)实时流式应用程序,这是Kafka致力于发展的方向,但是目前广泛使用的流式平台是Spark Streaming和Flink。
1.3为什么要使用Kafka
举个例子,小龙女做馒头给杨过吃
小龙女:生产者
杨过: 消费者
1)正常情况下:生产一个,消费一个
2)其他情况:
a) 小龙女一直生产,杨过吃到某一个馒头时,卡住了(机器故障),后面生产的馒头就丢失了
b) 小龙女做馒头的速度快,杨过来不及吃,馒头就丢了。
==>这时候需要拿一个篮子(Kafka),馒头做好以后先放到篮子里,要吃的话去篮子里面取
kafka就和这个例子中的篮子作用一样,起一个暂存保管的作用。对于流式处理来说,起消息缓冲的作用,让下游可以稳稳的消费。
以上说了Kafka的主要功能,当然作为一个成熟的大数据框架,Kafka还提供了一些必须的特性:
1)可水平扩展:篮子满了,装不下了,多准备几个篮子
2)高可用:有很多个篮子,一个二个出现问题,不影响
3)速度快:读写速度快
并且已被广泛应用。
1.4 架构
producer:生产者(生产馒头)
consumer:消费者(吃馒头)
broker:篮子
topic:主题(打标签,用来分类,甜的还是咸的)
二、快速开始
参考连接:http://kafka.apache.org/uses
2.1 前置
1)JDK
2)Zookeeper
2.2安装配置
以3台机器为例,修改 config/server.properties
# 集群中每个kafka的id,唯一性。我的配置 master=0 slave1=1 slave2=2
broker.id=0
# 伪分布式需要配置不同端口
# advertised.listeners=PLAINTEXT://master:9092
#kafka的日志目录,其实保存的是消息
log.dirs=/opt/app/kafka_2.11-2.2.1-kafka-4.1.0/kafka-logs
# 默认数据保留7天
# log.retention.hours=168
# segment 默认大小1G,数据按分区划分,分区细化为segment
# log.segment.bytes=1073741824
# zookeeper的地址
zookeeper.connect=master:2181,slave1:2181,slave2:2181
2.3常用命令(以Kafka2.2为例,一定要根据自己的版本去官网查看命令或则--help)
启动
# 每台机器,前提ZK已启动
> bin/kafka-server-start.sh [-daemon] config/server.properties
创建topic
# topic = test 3个分区,3份副本
> bin/kafka-topics.sh --create --bootstrap-server master:9092,slave1:9092,slave2:9092 --replication-factor 3 --partitions 3 --topic test
查看所有的topic
> bin/kafka-topics.sh --list --bootstrap-server master:9092,slave1:9092,slave2:9092
test
查看指定的topic信息
> bin/kafka-topics.sh --describe --bootstrap-server master:9092,slave1:9092,slave2:9092 --topic test
Topic:test PartitionCount:3 ReplicationFactor:3 Configs:
Topic: test Partition: 0 Leader: 0 Replicas: 0,1,2 Isr: 0,1,2
Topic: test Partition: 1 Leader: 1 Replicas: 1,2,0 Isr: 1,2,0
Topic: test Partition: 2 Leader: 2 Replicas: 2,0,1 Isr: 2,0,1
发送消息
> bin/kafka-console-producer.sh --broker-list master:9092,slave1:9092,slave2:9092 --topic test
This is a message
This is another message
接收消息
> bin/kafka-console-consumer.sh --bootstrap-server master:9092,slave1:9092,slave2:9092 --topic test --from-beginning
This is a message
This is another message
2.4基础概念
producer: 生产者例如Flume
consumer:消费者例如 Spark Streaming 、Flink
broker:消息处理节点
topic:主题,用来分类
partition:是topic物理的分组,partition是一个【有序的队列】,其实就是一个liunx文件夹,命名方式topic-序号
replication:副本数,就是数据保存几份,和HDFSblock一样,保证高可用
leader:读写分区节点
Isr:备胎列表,时刻等着成为leader