首页 > 其他分享 >kafka3.0.0版学习笔记

kafka3.0.0版学习笔记

时间:2022-08-30 17:47:40浏览次数:63  
标签:topic kafka3.0 消费者 分区 笔记 kafka 学习 消费 分配

定义

传统定义

kafka是一个分布式的基于发布/定于模式的消息队列,主要应用于大数据实时处理领域。

发布/订阅

消息的发布者不会将消息直接发送给特定的订阅者,而是将发布的消息分为不同的类型,订阅者只接受感兴趣的消息。

最新定义

kafka是一个开源的分布式事件流平台,被数千家公司用于高性能数据管道、解决生产消息和消费消息的处理速度不一致的情况。

应用场景

解耦

允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。

异步通信

允许用户把一个消息放入队列,但并不立即处理它。然后再需要的时候再去处理他们。

消息队列的两种模式

点对点模式

消费后删除、一个主题、一个消费者

发布/订阅模式

不删除数据、多个主题、多个消费者

消费方式

poll(拉取)模式

consumer采用从broker中主动拉取数据,kafka采用这种模式。

push(推送)模式

kafka没有采用这种模式。因为由于broker决定消息发送速率,很难使用所有消费者的消费速率,如推送的速度是50M/s,consumer1,consumer2就来不及处理消费(consumer1处理速度为10M/s,consumer2处理速度为20M/s)。
poll模式不足之处:如果kafka没有数据,消费者可能会陷入循环中,一直返回空数据。
每个消费者都会和coordinator保持心跳(默认3s),一旦超时(session.timeout.ms=45s 默认),该消费者会被一出,并触发再平衡;或者消费者处理消息的时间过长(max.poll.interval.ms=5分钟 默认)也会触发再平衡。
kafka不处理数据,只存储数据,数据尽在生产者、消费者端的拦截器(interceptors)中进行处理

消费者组

在消费者API代码中必须配置消费者组ID,命令行启动消费者不填写消费者组ID会被自动填写随机的消费者组ID。

  1. 一个consumer group中有多个consumer组成,一个topic有多个partition组成。现在问题是,到底由哪个consumer来消费哪个partition数据。
  2. kafka有4种主流的分区分配策略:Range、RoundRobin、Sticky、CooperativeSticky。可以通过配置参数partition.assignment.strategy修改翻去的分配策略。默认策略是Range+CooperativeSticky。kafka可以同时使用多个分区分配策略。

分区分配策略

Range是对每个topic而言的

首先对同一个topic里面的分区按照序号进行排序,并对消费者按照字母顺序进行排序。
通过partition数/consumer数来决定每个消费者应该消费几个分区,如果除不尽,则前面几个消费者会多消费1个分区。
注意:如果只是针对1个topic而言,C0消费者多消费1个分区影响不是很大,但是如果有N多个topic,那么针对每个topic,消费者C0都将多消费1个分区,topic越多,C0消费的分区会比其他消费者明显多N个分区。容易引起数据倾斜!!
分区在命令行修改是,只能增加,不能减少!!
Range策略下,若某一消费者挂了,则45s内无其他消费者接替,45s之后此部分数据将全部交由另一个消费者消费。例:C1会消费5个分区数据(总7个分区,C0挂掉),45s之后会触发再平衡(即C1消费4个分区,C2消费3个分区)。

RoundRobin针对集群中所有topic而言

RoundRobin轮询分区策略,是吧所有的partition和所有的consumer都列出来,然后按照hashcode进行排序,最后通过轮询算法来分配partition给到各个消费者。
在RoundRobin策略下,若C0挂掉,则45s内无其他消费者接替,45s以后,这部分数据扔按轮询算法由其他消费者接替(即C1分配2个,C2分配1个)。企业中应用较多。

Sticky

粘性分区的定义:可以理解为分配的结果带有“粘性的”,即在执行一次新的分配之前,考虑上一次分配的结果,尽量少的调整分配的变动,可以节省大量开销。
从kafka 0.11.x版本开始引入这种分配测了,首先会尽量均衡的放置分区到消费者上面,在出现同一消费者组内消费者出现问题时,会尽量保持原有分配的分区不变化。若其中一个消费者挂掉,45s后按粘性消费此部分数据。45s触发再平衡后,会保持原来的分配不变,将新的需要分配的分区粘性分配。

偏移量offset

消费者offset默认维护位置:

0.9版本开始,consumer默认将offset保存在kafka一个内置的topic中,该topic为_consumer_offsets。
0.9版本之前,存在zookeeper中,主要考虑通讯网络上的压力。

指定offset消费

auto.offset.reset=earliest|latest(默认)|none。

  1. earliest:自动将偏移量重置为最早的偏移量--from-beginning。
  2. latest(默认值):自动将偏移量重置为最新偏移量。
  3. none:如果未找到消费者组的先前偏移量,则向消费者抛出异常。

指定时间消费

将时间转化为offset。

漏消费与重复消费(如何保证精确一次性消费)

解决方法:事务,要求下游支持事务回滚。
生产者部分设置幂等。
事务:生产端→集群(broker)→消费者→计算框架

数据积压

  1. 增加分区,增加消费者个数。
  2. 生产端→集群(broker),设置4个参数以提高吞吐量。
  3. 消费端,2个参数:50m,500条。

kafka-eagle即efak

将监控信息传入db,一般用mysql。

kafka-kraft模式(架构)

2.8.0版本以后出现的新特性。
启动与之前不用,需要导kraft目录下。

kafka外部集成

可集成flume,flink,spark,springboot,mqtt等。

数据流向:生产者→kafka集群→消费者。

2.8.0版本开始可以不用依赖zookeeper。

标签:topic,kafka3.0,消费者,分区,笔记,kafka,学习,消费,分配
From: https://www.cnblogs.com/saihao/p/16639423.html

相关文章

  • spring 学习笔记二ioc基础
    控制反转IoC(InversionofControl),是一种设计思想,DI(依赖注入)是实现IoC的一种方法控制反转就是将控制权从程序手里转到我们手里,通过我们输入的获取对象,不是通过程序获取......
  • 学习 Tailwind CSS 的先决条件
    学习TailwindCSS的先决条件在本文中,我们将介绍您在开始之前需要了解的最低CSS知识顺风CSS.我假设你已经知道HTML基础.但如果你不这样做,我已经写了一个博客系列......
  • [ROS学习]10. 服务端Server的编程实现
    参考笔记:【ROS学习笔记】10.服务端Server的编程实现内容参考:基于B站ROS公开课:【古月居】古月·ROS入门21讲基于Ubuntu20.04.1、Noetic版本本节说明上一讲学习了基于Ser......
  • 工作流引擎 Activiti 学习笔记(一)
    一、什么是工作流1.概念工作流(Workflow)是指一类能够完全自动执行的经营过程,根据一系列过程规则,将文档、信息或任务在不同的执行者之间进行传递与执行。2.工作流的实......
  • 【防忘笔记】一个例子理解Pytorch中一维卷积nn.Conv1d
    一维卷积层的各项参数如下torch.nn.Conv1d(in_channels,out_channels,kernel_size,stride=1,padding=0,dilation=1,groups=1,bias=True,padding_mode='zeros',de......
  • 如果我讨厌数学,我应该学习计算机科学吗?
    我是不是该学习计算机科学如果我恨数学?有两部分。首先,没有太多的数学典型的CS程度。在UBC,CS学位需要达到分析三、线性代数,和统计数据。这是小与什么物......
  • Python学习笔记:add、sub、mul、div、mod、pow
    一、介绍add()函数用于向调用者添加对象。使用语法为:DataFrame.add(other,axis='columns',level=None,fill_value=None)实际上等价于dataframe+other的直接使......
  • spring 学习笔记一组成
    Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。组成通过core支持上边其他模块组成Spring框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个......
  • python自学笔记10:while循环和for循环
    条件控制和循环控制是两种典型的流程控制方法,前面我们写了if条件控制,这节讲for循环和while循环。循环是另一种控制流程的方式,一个循环体中的代码在程序中只需要编......
  • vite+vue2 的学习与问题记录
    描述按照博文[https://juejin.cn/post/6988808776291713060]指导步骤执行完成。问题记录运行npmrundev控制台显示failedtoloadconfigfrom/Users/study-vite-vu......