Kafka导航【Kafka】

Kafka导航【Kafka】

  • 前言
  • 版权
  • 推荐
  • Kafka
    • 随堂笔记
  • 第三章 生产者
    • 3.4生产者分区
      • 3.4.1.分区好处
      • 3.4.2 生产者发送消息的分区策略
      • 3.4.3 自定义分区器
    • 3.5 生产经验——生产者如何提高吞吐量
    • 3.6 生产经验——数据可靠性
    • 3.7 生产经验——数据去重
      • 3.7.1 数据传递语义
      • 3.7.2 幂等性
      • 3.7.3生产者事务
    • 生产经验——数据有序
    • 生产经验——数据乱序
    • Kafka总体
      • 如何提升吞吐量
      • 数据精准一次
  • 最后

前言

2023-9-4 09:20:52

以下内容源自《【Java】》
仅供学习交流使用

版权

禁止其他平台发布时删除以下此话
本文首次发布于CSDN平台
作者是CSDN@日星月云
博客主页是https://blog.csdn.net/qq_51625007
禁止其他平台发布时删除以上此话

推荐

【尚硅谷】Kafka3.x教程(从入门到调优,深入全面)

kafka学习笔记

链接: https://pan.baidu.com/s/19Bcvf1oUwQP1UIJMlEg5Xw
提取码: wkb4

Kafka

第1章 Kafka概述【Kafka】

第2章 Kafka快速入门【Kafka】

第3章 Kafka生产者【Kafka】

第4章 Kafka Broker【Kafka】

第5章 Kafka消费者【Kafka】

第6章 Kafka-Eagle监控【Kafka】

第7章 Kafka-Kraft模式【Kafka】

随堂笔记

一、概述
	1、定义
		1)传统定义
			分布式  发布订阅   消息队列
			发布订阅:分为多种类型 订阅者根据需求 选择性订阅
		2)最新定义
			流平台(存储、计算)
	2、消息队列应用场景
		1)缓存消峰 
		2)解耦
		3)异步通信
	3、两种模式
		1)点对点
			(1)一个生产者 一个消费者 一个topic  会删除数据  不多

		2)发布订阅
			(1)多个生产者  消费者多个  而且相互独立  多个topic 不会删除数据
	4、架构
		1)生产者
			100T数据
		
		2)broker 
			(1)broker  服务器 hadoop102 103 104
			(2)topic 主题  对数据分类
			(3)分区
			(4)可靠性  副本
			(5)leader  follower 
			(6)生产者和消费者 只针对leader操作
		
		
		3)消费者
			(1)消费者和消费者相互独立
			(2)消费者组 (某个分区 只能由一个消费者消费)
		
		
		4)zookeeper
			(1)broker.ids 0 1 2 
			(2)leader 
二、入门
	1、安装
		1)broker.id  必须全局唯一
		2)broker.id、log.dirs zk/kafka
		3)启动停止  先停止kafka  再停zk
		4)脚本
			#!/bin/bash
			
			case $1 in
			"start")
				for i in hadoop102 hadoop103 hadoop104
				do
					ssh $i "绝对路径"
				done
			;;
			"stop")
			
			;;
			esac
	2、常用命令行
		1)主题 kafka-topic.sh 
			(1)--bootstrap-server  hadoop102:9092,hadoop103:9092
			(2)--topic first
			(3)--create 
			(4)--delete
			(5)--alter
			(6)--list
			(7)--describe
			(8)--partitions
			(9)--replication-factor 
	
		2)生产者 kafka-console-producer.sh 
			(1)--bootstrap-server  hadoop102:9092,hadoop103:9092
			(2)--topic first
		
		
		3)消费者 kafka-console-consumer.sh 
			(1)--bootstrap-server  hadoop102:9092,hadoop103:9092
			(2)--topic first
			
三、生产者 
	1、原理
	
	2、异步发送API
		0)配置
			(1)连接  bootstrap-server 
			(2)key value序列化
		
		1)创建生产者
		KafkaProducer<String,String>()
		
		2)发送数据
			send() send(,new Callback)
		
		3)关闭资源
	3、同步发送
		。。。
		
		send() send(,new Callback).get()
		。。。
	4、分区	
		1)好处
			存储
			
			计算
		2)默认分区规则
			(1)指定分区 按分区走
			(2)key  key的hashcode值%分区数
			(3)没有指定key  没有指定分区   粘性
				第一随机
		3)自定义分区
			定义类 实现partitioner接口 
	5、吞吐量提高
		1)批次大小  16k  32k
		2)linger.ms  0  => 5-100ms
		3)压缩  
		4)缓存大小  32m  => 64m 
	6、可靠性 
		acks  
		0  丢失数据
		1   也可能会丢  传输普通日志
		-1  完全可靠  + 副本大于等于2  isr >=2    => 数据重复
	7、数据重复
		1)幂等性
			<pid, 分区号,序列号>
			默认打开
		
		2)事务
			底层基于幂等性
			
			(1)初始化
			(2)启动
			(3)消费者offset
			(4)提交
			(5)终止
	8、数据有序
		单分区内有序(有条件)
		多分区有序怎么办?
	9、乱序
		1)inflight  =1 
		2)没有幂等性 inflight  =1 
		3)有幂等性
四、broker 
	1、zk存储了哪些信息
		(1)broker.ids
		(2)leader 
		(3)辅助选举  controller 
	2、工作流程
	
	3、服役
		1)准备一台干净服务器 hadoop100
		2)对哪个主题操作 
		3)形成计划
		4)执行计划
		5)验证计划
	
	4、退役
		1)要退役的节点不让存储数据
		2)退出节点
	5、副本 
		1)副本的好处   提高可靠性
		2)生产环境中通常2个  默认1个
		3)有leader follower  leader 
		4)isr 
		5)controller  isr[0  2 3 ] 存活  ar [0  1 2 3]
		6)Leader 挂了 
		7)follower 挂了  
		8)副本分配 默认 
		9)手动副本分配  制定计划  执行计划   验证计划  
		10)leader partition的负载均衡  10%
		11)手动增加副本因子 
	6、存储机制 
		broker  topic  partition log segment 1g   稀疏索引  4kb 
	7、删除数据
		默认7天   3天  7小时
		两种  删除  压缩 
		删除:
		压缩:
	8、高效读写
		1)集群  采用分区
		2)稀疏索引 
		3)顺序读写 
		4)零拷贝 和页缓存 
五、消费者 
	1、总体流程
	2、消费者组 
	3、按照主题消费
		0)配置信息
			连接
			反序列化
			组id 
			
		1)创建消费者
		2)订阅主题
		
		3)消费数据
	4、按照分区 
	5、消费者组案例
		组id 
	6、分区分配策略  再平衡
		7个分区  3个消费者
		
		range
		0  1 2 x
		3 4 
		5 6 
		
		
		roundrobin
		轮询
		0  3  6
		1  4
		2  5
	
		
		
		粘性  2 2 3 
		0  3 4
		2  6
		1 5 
	7、offset
		1)默认存储在系统主题
		2)自动提交  5s   默认 
		3)手动提交  同步  异步  
		4)指定offset消费  seek ()
		5)按照时间消费  
		6)漏消费  重复消费
	8、事务 
		生产端  =》 集群
		集群 =》 消费者
		消费者 =》 框架
	9、数据积压
		1、增加分区 增加消费者个数
		2、生产  =》 集群  4个参数
		3、消费端  两个参数  50m   500条
		
六、生产调优 硬件选择
	1、100万日活 * 没人每天产生日志100条  =  1亿条 (中型公司)
		处理日志速度  1亿条 / (24 * 3600s ) = 1150条/s 
		1条日志 (0.5k - 2k 1k)
		1150条 * 1k /s  =  1m/s 
		
		高峰值 (中午小高峰 8 -12 ): 1m/s  * 20倍 =  20m/s  -40m/s 
		
	2、购买多少台服务器
		服务器台数= 2 * (生产者峰值生产速率 * 副本数 / 100) + 1 
				   =  2  * (20m/s * 2 /100) + 1
				   = 3 台
					
	3、磁盘选择
		kafka 按照顺序读写   机械硬盘和固态硬盘 顺序读写速度差不多
		
		1亿条  *  1k = 100g 
		100g * 2个副本 * 3天 / 0.7 = 1t
		建议三台服务器总的磁盘大小  大于1t 
		
	4、内存选择
		kafka  内存 = 堆内存(kafka 内部配置) + 页缓存(服务器内存)
		1)堆内存 10 -15g
		2)页缓存  segment (1g )  (分区数Leader(10) * 1g * 25%)/ 3 = 1g
		一台服务器 10g + 1g 
		
	5、CPU选择	
		32cpu
	6、网络选择
	
	测试:
	1、batch.size=16384 linger.ms=0      9.76 MB/sec
	2、batch.size=32768 linger.ms=0     9.76 MB/sec
	3、batch.size=4096 linger.ms=0      3.81 MB/sec
	4、batch.size=4096 linger.ms=50	  3.83 MB/sec
	5、batch.size=4096 linger.ms=50 compression.type=snappy   3.77 MB/sec
	6、batch.size=4096 linger.ms=50 compression.type=zstd     5.68 MB/sec
	7、batch.size=4096 linger.ms=50 compression.type=gzip      5.90 MB/sec
	8、batch.size=4096 linger.ms=50 compression.type=lz4       3.72 MB/sec
	9、batch.size=4096 linger.ms=50 buffer.memory=67108864   3.76 MB/sec

	
	消费者  一次处理500条   81.2066m/s 
	消费者  一次处理2000条  138.0992m/s 
	消费者  一次处理2000条  fetch.max.bytes=104857600   145.2033m/s

		

第三章 生产者

3.4生产者分区

3.4.1.分区好处

在这里插入图片描述

3.4.2 生产者发送消息的分区策略

3.4.3 自定义分区器

3.5 生产经验——生产者如何提高吞吐量

可以修改以下4个参数:

  1. batch.size:批次大小,默认16k (也就是一个batch满了16kb就发送出去).如果 batch 太小,会导致频繁网络请求,吞吐量下降;
    如果batch太大,会导致一条消息需要等待很久才能被发送出去,而且会让内存缓冲区有很大压力,过多数据缓冲在内存里.一般在实际生产环境,这个batch的值可以增大一些来提升吞吐量。
  2. linger.ms:等待时间,默认值是0ms(意思就是消息立即被发送,不延迟,来一条发送一条),但是这是不对的。可以将其修改为5-100ms.假如linger.ms设置为为50ms,消息被发送出去后会进入一个batch,如果50ms内,这个batch满了16kb就会被发送出去。但是如果50ms时间到,batch没满,那么也必须把消息发送出去了,不能让消息的发送延迟时间太长,也避免给内存造成过大的一个压力。
  3. compression.type默认是none,不压缩,可以使用lz4,snappy等压缩,压缩之后可以减小数据量,提升吞吐量,但是会加大producer端的cpu开销。
  4. RecordAccumulator(buffer.memory):设置发送消息的缓冲区,默认值是33554432(32MB).如果发送消息出去的速度小于写入消息进去的速度,就会导致缓冲区写满,此时生产消息就会阻塞住,所以说这里就应该多做一些压测,尽可能保证说这块缓冲区不会被写满导致生产行为被阻塞住.缓冲区大小,可以将其修改为64m.

3.6 生产经验——数据可靠性

1.ack 应答原理

在这里插入图片描述
思考:Leader收到数据,所有Follower都开始同步数据,但有一个Follower,因为某种故障,迟迟不能与Leader进行同步,那这个问题怎么解决呢?
Leader维护了一个动态的in-sync replica set(ISR),意为和Leader保持同步的Follower+Leader集合(leader:0,isr:0,1,2)。如果Follower长时间未向Leader发送通信请求或同步数据,则该Follower将被踢出ISR。该时间阈值由replica.lag.time.max.ms参数设定,默认30s。例如2超时,(leader:0, isr:0,1)。这样就不用等长期联系不上或者已经故障的节点。

数据可靠性分析(以下2种情况和ack=1的效果是一样的,仍然有丢数的风险(leader:0,isr:0)):

分区副本设置为1个
ISR里应答的最小副本数量(min.insync.replicas,默认为1)设置为1.设置acks=all,且副本数为3,极端情况下,如果ISR中只有leader一个副本时,此时producer发送的数据只要leader同步成功就会返回响应.
因此:

数据完全可靠条件 = ACK级别设置为-1 + 分区副本大于等于2 + ISR里应答的最小副本数量大于等于2

可靠性总结:

  1. acks=0,生产者发送过来数据就不管了,可靠性差,效率高;
  2. acks=1,生产者发送过来数据Leader应答,可靠性中等,效率中等;
  3. acks=-1,生产者发送过来数据Leader和ISR队列里面所有Follwer应答,可靠性高,效率低;

在生产环境中,acks=0很少使用;acks=1,一般用于传输普通日志,允许丢个别数据;acks=-1,一般用于传输和钱相关的数据,对可靠性要求比较高的场景。

3.7 生产经验——数据去重

3.7.1 数据传递语义

数据传递语义:

至少一次(At Least Once)= ACK级别设置为-1 + 分区副本大于等于2 + ISR里应答的最小副本数量大于等于2
最多一次(At Most Once)= ACK级别设置为0
总结:

  • At Least Once可以保证数据不丢失,但是不能保证数据不重复;
  • At Most Once可以保证数据不重复,但是不能保证数据不丢失。
  • 精确一次(Exactly Once):对于一些非常重要的信息,比如和钱相关的数据,要求数据既不能重复也不丢失。Kafka 0.11版本以后,引入了一项重大特性:幂等性和事务。

3.7.2 幂等性

1)幂等性原理

幂等性就是指Producer不论向Broker发送多少次重复数据,Broker端都只会持久化一条,保证了不重复。

精确一次(Exactly Once)=幂等性+至少一次( ack=-1+分区副本数>=2+ISR最小副本数量>=2)。

重复数据的判断标准:具有<PID, Partition,SeqNumber>相同主键的消息提交时,Broker只会持久化一条。其中PID是Kafka每次重启都会分配一个新的;Partition表示分区号;Sequence Number是单调自增的。

所以幂等性只能保证的是在单分区单会话内不重复

2) 如何使用幂等性

开启参数 enable.idempotence 默认为 true,false 关闭。

3.7.3生产者事务

1)Kafka 事务原理

在这里插入图片描述

生产经验——数据有序

生产经验——数据乱序

生产经验——分区的分配以及再平衡
Range 以及再平衡
RoundRobin 以及再平衡
Sticky 以及再平衡

Kafka总体

如何提升吞吐量

如何提升吞吐量?

  1. 提升生产吞吐量
    (1)buffer.memory:发送消息的缓冲区大小,默认值是32m,可以增加到64m。
    (2)batch.size:默认是16k。如果batch设置太小,会导致频繁网络请求,吞吐量下降;如果batch太大,会导致一条消息需要等待很久才能被发送出去,增加网络延时。
    (3)linger.ms,这个值默认是0,意思就是消息必须立即被发送。一般设置一个5-100毫秒。如果linger.ms设置的太小,会导致频繁网络请求,吞吐量下降;如果linger.ms太长,会导致一条消息需要等待很久才能被发送出去,增加网络延时。
    (4)compression.type:默认是none,不压缩,但是也可以使用lz4压缩,效率还是不错的,压缩之后可以减小数据量,提升吞吐量,但是会加大producer端的CPU开销。
  2. 增加分区
  3. 消费者提高吞吐量
    (1)调整fetch.max.bytes大小,默认是50m。
    (2)调整max.poll.records大小,默认是500条。
  4. 增加下游消费者处理能力

数据精准一次

  1. 生产者角度
    (1) acks设置为-1 (acks=-1)。
    (2)幂等性(enable.idempotence = true) + 事务 。
  2. broker服务端角度
    (1)分区副本大于等于2 (–replication-factor 2)。
    (2) ISR里应答的最小副本数量大于等于2 (min.insync.replicas = 2)。
  3. 消费者
    (1) 事务 + 手动提交offset (enable.auto.commit = false)。
    (2) 消费者输出的目的地必须支持事务(MySQL、Kafka)。

最后

2023-9-7 18:06:13

我们都有光明的未来

祝大家考研上岸
祝大家工作顺利
祝大家得偿所愿
祝大家如愿以偿
点赞收藏关注哦

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python爬虫笔记1

1 爬虫介绍 爬虫概述&#xff1a; 获取网页并提取和保存信息的自动化程序 1.获取网页 2.提取信息 css选择器 xpath 3.保存数据&#xff08;大数据时代&#xff09; 4.自动化 爬虫&#xff08;资产收集&#xff0c;信息收集&#xff09; 漏扫&#xff08;帮我发现漏洞&#xff…

FK中的一些方法

1. 隔离法与整体法 目标&#xff1a;对一个拉新邀请任务&#xff0c;识别出其中的作弊用户。 欺诈类的数据&#xff0c;黑样本不足&#xff0c;需要自己去找&#xff0c;可按IP、昵称、手机号相似性等。虽然有 会员等级、注册时长、注册地址、成交订单等特征&#xff0c;但分类…

内网抓取Windows密码明文与hashdump思考题笔记整理

目录 思考题 第一题 第二题 第三题 第四题 第五题 思考题 1.windows登录的明文密码&#xff0c;存储过程是怎么样的&#xff0c;密文存在哪个文件下&#xff0c;该文件是否可以打开&#xff0c;并且查看到密文 2.我们通过hashdump 抓取出 所有用户的密文&#xff0c;分为…

扩散卷积模型 笔记

1 Title Diffusion Convolutional Neural Networks&#xff08;James Atwood and Don Towsley&#xff09;【NeurIPS 2016】 2 Conclusion This paper presents diffusion-convolutional neural networks (DCNNs), a new model for graph-structured data. Through the introd…

国内如何用GPT4

许多人曾向我咨询是否有一个稳定且不折腾的全球AI大模型测试网站&#xff0c;既能确保真实可靠性&#xff0c;又能保障稳定、快速的运行&#xff0c;避免频繁出现故障、错误或漫长的等待时间。到目前为止&#xff0c;我已经尝试了国内超过10个镜像站点&#xff0c;但遗憾的是&a…

【R语言】概率密度图

概率密度图是用来表示连续型数据的分布情况的一种图形化方法。它通过在数据的取值范围内绘制一条曲线来描述数据的分布情况&#xff0c;曲线下的面积代表了在该范围内观察到某一数值的概率。具体来说&#xff0c;对于给定的连续型数据&#xff0c;概率密度图会使用核密度估计&a…

分布式锁实现方案-基于zookeeper的分布式锁实现(原理与代码)

目录 一、基于zookeeper的分布式锁 1.1 基于Zookeeper实现分布式锁的原理 1.1.1 分布式锁特性说明 1.1.1.1 特点分析 1.1.1.2 本质 1.1.2 Zookeeper 分布式锁实现原理 1.1.2.1 Zookeeper临时顺序节点特性 1.1.2.2 Zookeeper满足分布式锁基本要求 1.1.2.3 Watcher机制 …

重生奇迹mu坐骑怎么升级

重生奇迹mu坐骑怎么升级 1、前期&#xff0c;都是主线任务&#xff0c;我们必须要跟着主线任务走&#xff0c;前面的话升级一次需要的经验很少的&#xff0c;一天下来可以升级100级是轻轻松松的&#xff0c;主线任务是比较多的&#xff0c;我们跟着任务一直做差不多可以到150级…

陇剑杯 省赛 攻击者1 CTF wireshark 流量分析

陇剑杯 省赛 攻击者1 题目 链接&#xff1a;https://pan.baidu.com/s/1KSSXOVNPC5hu_Mf60uKM2A?pwdhaek 提取码&#xff1a;haek ├───LogAnalize │ ├───linux简单日志分析 │ │ linux-log_2.zip │ │ │ ├───misc日志分析 │ │ acce…

MATLAB实现遗传算法优化BP神经网络预测数值(GABP)

遗传算法&#xff08;Genetic Algorithm, GA&#xff09;和反向传播&#xff08;Back Propagation, BP&#xff09;神经网络是两种强大的算法&#xff0c;分别用于优化和机器学习。将遗传算法与BP神经网络结合&#xff0c;可以利用遗传算法的全局搜索能力来优化BP神经网络的初始…

CAP实战Demo理论

问题 分布式微服务研发总会遇到CAP理论相关&#xff0c;但是没有相应例子&#xff0c;总是遗忘。 实践 实验 节点1 含有App1 Data1 节点2 含有App2 Data1 当节点1写请求执行成功&#xff0c;节点1数据为Data2&#xff0c;网络不通无法同步时 节点2 发送读请求 满足A可用性…

HBase安装部署

Apache HBase是按列存储数据的NoSQL类型数据库&#xff0c;其数据文件是存储在Hadoop集群中&#xff0c;支持数据以及服务的高可用性以及支持集群节点的大规模可扩展性&#xff0c;本文主要描述HBase的安装部署。 如上所示&#xff0c;HBase的总体架构&#xff0c;HBase Master…

「GO基础」变量

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【java】(软考)面向对象---责任链解析

目录 责任链的意义 手写笔记 ​编辑 责任链的意义 当您把请求给出时&#xff0c;如果某对象不能实现您的操作&#xff0c;责任链会自动把您的请求传给它的下一级 从而避免请求的发送者和接受者之间的耦合关系 这里以2007年下半年试题七进行说明 题目描述 某企业的采购审批…

EFK安装与使用!!!

一、将你的项目进行打包。 二、上传到docker&#xff0c; 启动项目 三、修改前端的代理路径 四、EFK相关配置 1、docker-compose.yml&#xff1a; version: 3 services:kibana:image: kibana:7.14.0ports:- "5601:5601"environment:- ELASTICSEARCH_HOSTShttp://19…

Excel数据处理:使用条件格式

选中你要特别体现的列 然后在开始处点击条件格式 标记大于1500000的值 点击突出显示 点击大于 输入1500000 设置单元格格式 点击条件格式 点击清除 去掉表头的格式 标记重复值强调显示 公式的使用 要去锁定单元格的值&#xff08;加上F4&#xff09; 比较后一列相同位置…

数据结构(七)——B树和B+树

7.4.1_1 B树 5叉查找树 //5叉排序树的结点定义 struct Node {ElemType keys[4]; //最多4个关键字struct Node &child[5]; //最多5个孩子int num; //结点中有几个关键字 }; 如何保证查找效率&#xff1f; eg:对于5叉排序树&#xff0c;规定…

kafka学习1 - 线程、进程消息通信方式、JMS模型、Kafka原理图

1、线程和线程之间的数据交互 两个不同的线程之间是可以通过堆内存的方式进行数据交互的&#xff1b; T1线程的数据发送得到堆内存&#xff0c;T2线程就可以共享堆内存的数据。 存在的问题&#xff1a; T1线程发送数据的速率是50/s&#xff0c;T2线程消费的速率是30/s&#…

Jmeter-非GUI模式下运行jmeter脚本-适用于服务器上持续集成测试

背景 大部分Jmeter脚本都是部署在Linux上运行&#xff0c;利用Jenkins做接口自动化&#xff0c;定时巡检任务。 执行命令 1.进入jmeter的目录&#xff0c;bin文件夹 cd C:\path\to\jmeter\bin2.运行脚本文件 jmeter -n -t D:\{脚本文件目录}\xxx.jmx -l D:\{脚本文件目录}…

mac可以玩steam吗 mac安装steam教程 苹果电脑能打steam游戏吗 苹果电脑怎么安装windows 苹果mac电脑配置AI功能的M4芯片

众所周知&#xff0c;Steam作为一个热门的游戏平台&#xff0c;深受国内外玩家的喜爱&#xff0c;平台中包含了无数的游戏&#xff0c;在作战时玩家们能够与朋友们互动聊天&#xff0c;还能匹配好友组队&#xff0c;同时还能增进与同伴的默契度。 但是最近有玩家们提问说&#…
最新文章