Kafka第一课概述与安装

生产经验 面试重点
Broker面试重点
代码,开发重点
67 章了解

如何记录行为数据

1. Kafka概述

1.产生原因

前端 传到日志 日志传到Flume 传到HADOOP
但是如果数据特比大,HADOOP就承受不住了

2.Kafka解决问题

控流消峰
Flume传给Kafka
存到Kafka
Hadoop 从Kafka取数据 ,而不是Kafka强行发
类似 菜鸟驿站, 先存取来,我们主动去取,或者指定他去送

存到HDFS的,一定不是实时数据,因为HDFS太慢了
在这里插入图片描述

3.应用场景

1. 缓冲/消峰

消息队列存储数据,而不是直接发给处理系统,处理完一部分,再取,再处理
在这里插入图片描述

2.解耦

通过中间件接口,适配不同数据源和目的地

在这里插入图片描述

3.异步通信

允许用户将消息放入队列,但不立即处理,然后再需要的时候处理。
为什么异步处理快: 同步需要等待
点餐:
同步:服务员过来给我点餐 ,这里需要服务员过来
异步:扫桌子码自己点餐

4.消息队列模式

在这里插入图片描述
在这里插入图片描述
Kafka使用发布订阅模式
数据会保存一段时间

5.基础架构

生产者 - Broker - Group
TopicA是什么?
这里的分区是什么?
分区: 物理分割
为什么要分割:结合集群分散存储
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1. 分区操作

topic 是一整个数据 ,分区是为了将数据分在不同的Broker上。类似于HDFS,
Broker是物理存储
Partition 类似于DN

2.消费者组的概念

类似权限管理把,组内并行消费,便于管理

  • Producer生产者: 向Kafka broker发消息的客户端(自主)
  • Consumer消费者: 从Kafka取消息的客户端(自主)
  • Group 组: 消费者组。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。
    这个说明,分区不支持并行读取,一个分区只能同时一个组内消费者消费。
    组内消费者对不同分区进行读取,是为了优化读取速率.
  • Broker 一台Kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。
  • Topic:可以理解为一个队列,生产者和消费者面向的都是一个topic。
  • Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列。
  • Leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是Leader。
  • Follower:每个分区多个副本中的“从”,实时从Leader中同步数据,保持和Leader数据的同步。Leader发生故障时,某个Follower会成为新的Leader。
  • Replica:副本。一个topic的每个分区都有若干个副本,一个Leader和若干个Follower。

3.副本

备份功能,备份partition 多个副本, 类似HDFS,类似DN(存入一下子3个)把
多副本时,一个副本叫leader 另一个副本叫follower,
也是选出来的角色 交互时只和leader交互
follower平时只有备份作用,但是当leader倒下时,他直接成为leader
在这里插入图片描述
这里是存储数据的目录,而不是存Kafka自己日志的目录
在这里插入图片描述
高可用, 配置多个
在这里插入图片描述
replicas 是存储副本的位置
lsr 是目前存活的副本

分区数只能改大,不能改小
副本数修改,
通过JSON手动修改

消费者按最新的offect进行消费

5.配置

1.解压

[atguigu@hadoop102 software]$ tar -zxvf kafka_2.12-3.3.1.tgz -C /opt/module/
[atguigu@hadoop102 module]$ mv kafka_2.12-3.3.1/ kafka

2.配置文件

配置文件目前只需要修改三个
broker编号 不同机器只需要编号不同即可
log.dir 数据存放位置
zookeeper.connect 连接集群的地址

[atguigu@hadoop102 kafka]$ cd config/
[atguigu@hadoop102 config]$ vim server.properties
# 修改1 broker的全局唯一编号,不能重复,只能是数字。 
broker.id=0#处理网络请求的线程数量
num.network.threads=3
#用来处理磁盘IO的线程数量
num.io.threads=8
#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400
#接收套接字的缓冲区大小
socket.receive.buffer.bytes=102400
#请求套接字的缓冲区大小
socket.request.max.bytes=104857600
#修改2 这里其实是是存放到Kafka的数据的地方 kafka运行日志(数据)存放的路径,路径不需要提前创建,kafka自动帮你创建,可以配置多个磁盘路径,路径与路径之间可以用","分隔
log.dirs=/opt/module/kafka/datas
#topic在当前broker上的分区个数
num.partitions=1
#用来恢复和清理data下数据的线程数量
num.recovery.threads.per.data.dir=1
# 每个topic创建时的副本数,默认时1个副本
offsets.topic.replication.factor=1
#segment文件保留的最长时间,超时将被删除
log.retention.hours=168
#每个segment文件的大小,默认最大1G
log.segment.bytes=1073741824
# 检查过期数据的时间,默认5分钟检查一次是否数据过期
log.retention.check.interval.ms=300000
#修改3  连接集群的位置 配置连接Zookeeper集群地址(在zk根目录下创建/kafka,方便管理)
zookeeper.connect=hadoop102:2181,hadoop103:2181,hadoop104:2181/kafka

3. 环境变量

sudo vim /etc/profile.d/my_env.sh
#KAFKA_HOME
export KAFKA_HOME=/opt/module/kafka
export PATH=$PATH:$KAFKA_HOME/bin

这个是为了启动的时候不需要输入一长串地址
比如:bin/kafka-server-start.sh -daemon config/server.properties
这里的config是kafka的路径 启动需要输入全路径

bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties

修改后

kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties

4.集群脚本

#! /bin/bash
if [ $# -lt 1 ]
then echo "参数错误,请输入start或者stop"exit
fi
case $1 in
"start"){for i in hadoop102 hadoop103 hadoop104 do echo "---------------启动 $i Kafka ----------------------"ssh  $i  "$KAFKA_HOME/bin/kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties"done
};;
"stop"){for i in hadoop102 hadoop103 hadoop104do echo "---------------停止 $i Kafka ---------------------"ssh $i  "$KAFKA_HOME/bin/kafka-server-stop.sh -daemon $KAFKA_HOME/config/server.properties"done
};;
esac

2.命令

1.主题命令

1. --bootstrap-server <String: server toconnect to>

连接Broker 操作Kafka必须有这个命令
既可以输入一个,也可以输入多个

kafka-topics.sh --bootstrap-server hadoop102:9092,hadoop103:9092,hadoop104:9092 

2.主题的创建和删除

– create +空格 ±-topic+空格+主题名
– delete +空格 ±-topic+空格+主题名
主题 主题名 一般放最后

[atguigu@hadoop102 kafka]$ bin/kafka-topics.sh --bootstrap-server hadoop102:9092 --create --partitions 1 --replication-factor 3 --topic first

在这里插入图片描述

–topic 定义topic名
–replication-factor 定义副本数
–partitions 定义分区数
在这里插入图片描述

3.查看所有主题

–list

4.查看主题详细描述

可以看单个主题,可以看全部主题
不加后缀默认查看全部
查看单个需要+空格 ±-topic+空格+主题名
在这里插入图片描述
在这里插入图片描述

5.修改–alter

设置分区数
–partitions <Integer: # of partitions>
在这里插入图片描述
分区只能调大,不能调小

设置分区副本
–replication-factor<Integer: replication factor>

// 手动调整kafka topic分区的副本数 {// 1. 版本号 这个是自定义的版本号"version":1,// 2. 分区是重点,因为副本改变分区也要改变。//   其实就是将分区的副本重新进行布局"partitions":[{"topic":"first","partition":0,"replicas":[1,2,0]},{"topic":"first","partition":1,"replicas":[2,0,1]},{"topic":"first","partition":2,"replicas":[2,0,1]}] 
}
// 运行命令
//kafka-reassign-partitions.sh --bootstrap-server hadoop102:9092 --reassignment-json-file ./rep.json --execute

在这里插入图片描述

更新系统默认的配置。
–config <String: name=value>
临时调配参数

2.生产者命令

1.操作

--topic <String: topic>
[atguigu@hadoop102 kafka]$ bin/kafka-console-producer.sh
bin/kafka-console-producer.sh --bootstrap-server hadoop102:9092 --topic first

在这里插入图片描述

3.消费者

kafka-console-consumer.sh --bootstrap-server +集群+ 主题

  • –bootstrap-server <String: server toconnect to> 连接的Kafka Broker主机名称和端口号。
  • –topic <String: topic> 操作的topic名称。
  • –from-beginning 从头开始消费。
  • –group <String: consumer group id> 指定消费者组名称。
kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --topic first

为什么消费者未开启时,生产者发送的消息,等消费者起来了收不到?
没有指定消费者组时,每次开启,消费者属于的消费者组就是随机的,那么就无法进行断点续传
当主动指定组后,再次登录,在指定组后,会自动开启断点续传功能
在这里插入图片描述
在这里插入图片描述
想要提前的顺序,就需要,–from-beginning
但是不能和用户组一起跑

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/60868.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

出现Error: Cannot find module ‘compression-webpack-plugin‘错误

错误&#xff1a; 解决&#xff1a;npm install --save-dev compression-webpack-plugin1.1.12 版本问题

QMainwindow窗口

QMainwindow窗口 菜单栏在二级菜单中输入中文的方法给菜单栏添加相应的动作使用QMenu类的API方法添加菜单项分隔符也是QAction类 工具栏状态栏停靠窗口 菜单栏 只能有一个, 位于窗口的最上方 关于顶级菜单可以直接在UI窗口中双击, 直接输入文本信息即可, 对应子菜单项也可以通…

flinksql sink to sr often fail because of nullpoint

flinksql or DS sink to starrocks often fail because of nullpoint flink sql 和 flink ds sink starrocks 经常报NullpointException重新编译代码 并上传到flink 集群 验证&#xff0c;有效 flink sql 和 flink ds sink starrocks 经常报NullpointException 使用flink-sta…

【Spring】(一)Spring设计核心思想

文章目录 一、初识 Spring1.1 什么是 Spring1.2 什么是 容器1.3 什么是 IoC 二、对 IoC 的深入理解2.1 传统程序开发方式存在的问题2.2 控制反转式程序的开发2.3 对比总结 三、对 Spring IoC 的理解四、DI 的概念4.1 什么是 DI4.2 DI 与 IoC的关系 一、初识 Spring 1.1 什么是…

Jenkins+Docker+SpringCloud微服务持续集成

JenkinsDockerSpringCloud微服务持续集成 JenkinsDockerSpringCloud持续集成流程说明SpringCloud微服务源码概述本地运行微服务本地部署微服务 Docker安装和Dockerfile制作微服务镜像Harbor镜像仓库安装及使用在Harbor创建用户和项目上传镜像到Harbor从Harbor下载镜像 微服务持…

网盘直链下载助手

一、插件介绍 1.介绍 这是一款免费开源获取网盘文件真实下载地址的油猴脚本&#xff0c;基于 PCSAPI&#xff0c;支持 Windows&#xff0c;Mac&#xff0c;Linux 等多平台&#xff0c;支持 IDM&#xff0c;XDown&#xff0c;Aria2 等多线程下载工具&#xff0c;支持 JSON-RPC…

linux_常用命令

一、日常使用命令/常用快捷键命令 开关机命令 1、shutdown –h now&#xff1a;立刻进行关机 2、shutdown –r now&#xff1a;现在重新启动计算机 3、reboot&#xff1a;现在重新启动计算机 4、su -&#xff1a;切换用户&#xff1b;passwd&#xff1a;修改用户密码 5、logou…

微服务——elasticsearch

初识ES——什么是elasticsearch elasticsearch的发展 初识ES——正向索引和倒排索引 初识ES——es与mysql的概念对比 类比到mysql中是表结构约束 概念对比 初始ES——安装es和kibana 1.部署单点es 1.1创建网络 要安装es容器和kibana容器并让他们之间相连&#xff0c;这里…

idea - 刷新 Git 分支数据 / 命令刷新 Git 分支数据

一、idea - 刷新 Git 分支数据 idea 找到 fetch 选项&#xff0c;重新获取分支数据 二、命令刷新 Git 分支数据 git fetch参考链接 1. 远程Gitlab新建的分支在IDEA里不显示

探讨C语言是否仍然满足现代编程需求

在过去的30年里&#xff0c;有人试图通过引入一门新的语言来取代C语言&#xff0c;其中一位被简称为BS的人也持有类似观点。尽管这门新语言在某些方面表现出色&#xff0c;但它并未能完全取代C语言&#xff0c;而是在特定领域发展出自己的优势。此后&#xff0c;又有一家公司决…

数据结构入门:队列

目录 文章目录 前言 1.队列 1.1 队列的概念及结构 1.2 队列的实现 1.2.1 队列的定义 1.2.2队列的初始化 1.2.3 入队 1.2.4 判空 1.2.5 出队 1.2.6 队头队尾数据 1.2.7 队列长度 1.2.8 队列销毁 总结 前言 队列&#xff0c;作为一种重要的数据结构&#xff0c;在计算机科学中扮演…

ffmpeg 4.4版本对MP4文件进行AES-CTR加密,和流式加密

对于ffmpeg的AES-CTR加密有两种方式&#xff0c;一个是普通的整个视频做加密&#xff0c;另一个是对视频做切片处理&#xff0c;然后进行加密。 一、对于普通的加密方式 直接使用下面的命令就行 ffmpeg -i animal.mp4 -vcodec copy -acodec copy -encryption_scheme cenc-aes…