统一版本:
zk:
kafka:0.10.0.0
jdk:1.8
1.消息系统的分类
1.点对点
主要采用的队列的方式,如A->B 当B消费的队列中的数据,那么队列的数据就会被删除掉【如果B不消费那么就会存在队列中有很多的脏数据】
2.发布-订阅
发布与订阅主要三大组件
主题:一个消息的分类
发布者:将消息通过主动推送的方式推送给消息系统;
订阅者:可以采用拉、推的方式从消息系统中获取数据
2.kafka简介
apache kafka是一个分布式发布-订阅消息系统和一个强大的队列,可以处理大量的数据,并使能够将消息从一个端点传递到另一个端点,kafka适合离线和在线消息消费。kafka消息保留在磁盘上,并在集群内复制以防止数据丢失。kafka构建在zookeeper同步服务之上。它与apache和spark非常好的集成,应用于实时流式数据分析。
3.kafka四大核心
1.生产者API
允许应用程序发布记录流至一个或者多个kafka的主题(topics)。
2.消费者API
允许应用程序订阅一个或者多个主题,并处理这些主题接收到的记录流。
3.StreamsAPI
允许应用程序充当流处理器(stream processor),从一个或者多个主题获取输入流,并生产一个输出流到一个或 者多个主题,能够有效的变化输入流为输出流。
4.ConnectorAPI
允许构建和运行可重用的生产者或者消费者,能够把kafka主题连接到现有的应用程序或数据系统。例如:一个连 接到关系数据库的连接器可能会获取每个表的变化。
4.Kafka的术语
Broker:一台服务器就一个Broker,两台服务器就是两个Broker
Topic:每条发布到kafka集群的消息都有一个类别,这个类别就叫做Topic
Partition:Partition分区是一个物理上的概念,每个Topic包含一个或者多个Partition
Producer:就是一个消息的生产者
Consumer:消息的消费者,向kafka的broker中读取消息的客户端
Consumer Group:每一个Consumer消费者属于一个特定的Consumer Group消费组
5.Kafka架构图
- 面试题:如果kafka消费速度过慢怎么办?
调整topic中的分区个数,把partition个数调大一些
因为这个partition数量决定了每个Consumer group中并发消费者的最大数量
6.Kafka集群环境搭建
1.集群规划
ip地址 | 节点 |
---|---|
2.初始化环境
jdk:1.8
zookeeper:
jdk,zookeeeper安装搭建教程
3.安装目录规划
安装包放置目录: /export/software
安装程序放置目录 /export/servers
三台机器统一执行命令进行创建
mkdir -p/exprot/servers
mkdir -p/export/servers
4.下载上传解压
- 下载
kafka下载地址 - 上传
使用shell的xftp进行上传,上传至/export/software - 解压
tar -zxvf kafka_2.11-0.10.0.0.tgz -C /export/servers/
5.修改配置文件
node01执行以下命令进入到kafka的配置文件目录,修改配置文件
- 修改以下内容
broker.id=0
log.dirs=/export/servers/kafka_2.11-0.10.0.0/logs
zookeeper.connect=node01:2181,node02:2181,node03:2181
- 在配置文件的结尾追加以下内容
delete.topic.enable=true //表示允许删除topic
host.name=node01 //当前服务器主机名
- 创建一个kafka的数据存储文件名字叫logs
mkdir -p /export/servers/kafka_2.11-0.10.0.0/logs
6.安装包分发
cd /export/servers/
scp -r kafka_2.11-0.10.0.0/ node02:$PWD
scp -r kafka_2.11-0.10.0.0/ node03:$PWD
7.修改node02,node03的配置文件
broker.id=2
host.name=node02
broker.id=3
host.name=node03
8.kafka-前台启动
三台机器都输入以下命令
cd /export/servers/kafka_2.11-0.10.0.0
bin/kafka-server-start.sh config/server.properties
9.kafka-后台启动
nohup bin/kafka-server-start.sh config/server.properties 2>&1 &
所有日志都会输出到这个nohup.out这个文件夹中
7.kafka集群命令行操作
1.创建topic
创建了一个名字为test的主题, 有三个分区,有两个副本
node01执行以下命令来创建topic
cd /export/servers/kafka_2.11-0.10.0.0
bin/kafka-topics.sh --create --zookeeper node01:2181 --replication-factor 2 -- partitions 3 --topic test
2.查看topic
bin/kafka-topics.sh --list --zookeeper node01:2181
3.生产数据
模拟生产者来生产数据
node01服务器执行以下命令来模拟生产者进行生产数据
bin/kafka-console-producer.sh --broker-list node01:9092,node02:9092,node03:9092 --topic test
4.消费数据
bin/kafka-console-consumer.sh --from-beginning --topic test --zookeeper node01:2181,node02:2181,node03:2181
5.查看topic的描述信息
bin/kafka-topics.sh --describe --topic test --zookeeper node01:2181
6.修改topic属性
(1)增加top分区数
任意kafka服务器执行以下命令可以增加topic分区数
bin/kafka-topics.sh --zookeeper node01:2181 --alter --topic test --partitions 8
(2)增加配置
刷新数据频率等于1
bin/kafka-topics.sh --zookeeper node01:2181 --alter --topic test --config flush.messages=1
(3)删除配置
bin/kafka-topics.sh --zookeeper node01:2181 --alter --topic test --delete-config flush.messages
(4)删除topic
bin/kafka-topics.sh --zookeeper node01:2181 --delete --topic test