Kafka运维相关知识

目录

一、基本概念

二、技术特性

三、设计思想

四、运维建议


一、基本概念

   Apache kafka 是一个分布式的基于push-subscribe的消息系统,它具备快速、可扩展、可持久化的特点。它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/spark流式处理引擎。

Producer:Producer即生产者,消息的产生者,是消息的入口。
kafka cluster
Broker:Broker是kafka实例,每个服务器上有一个或多个kafka的实例,我们姑且认为每个broker对应一台服务器。每个kafka集群内的broker都有一个不重复的编号,如broker-0、broker-1等。
Topic:消息的主题,可以理解为消息的分类,kafka的数据就保存在topic。在每个broker上都可以创建多个topic。
Partition:Topic的分区,每个topic可以有多个分区,分区的作用是做负载,提高kafka的吞吐量。同一个topic在不同的分区的数据是不重复的,partition的表现形式就是一个一个的文件夹!
Replication:每一个分区都有多个副本,副本的作用是做备胎。当主分区(Leader)故障的时候会选择一个备胎(Follower)上位,成为Leader。在kafka中默认副本的最大数量是10个,且副本的数量不能大于Broker的数量,follower和leader绝对是在不同的机器,同一机器对同一个分区也只可能存放一个副本(包括自己)。
Message:每一条发送的消息主体。
Consumer:消费者,即消息的消费方,是消息的出口。
Consumer Group:我们可以将多个消费组组成一个消费者组,在kafka的设计中同一个分区的数据只能被消费者组中的某一个消费者消费。同一个消费者组的消费者可以消费同一个topic的不同分区的数据,这也是为了提高kafka的吞吐量!

二、技术特性

高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒

可扩展性:kafka集群支持热扩展

持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失

容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)

高并发:支持数千个客户端同时读写

Consumergroup:各个consumer可以组成一个组,每个消息只能被组中的一个consumer消费,如果一个消息可以被多个consumer消费的话,那么这些consumer必须在不同的组。

消息状态:在Kafka中,消息的状态被保存在consumer中,broker不会关心哪个消息被消费了被谁消费了,只记录一个offset值(指向partition中下一个要被消费的消息位置),这就意味着如果consumer处理不好的话,broker上的一个消息可能会被消费多次。

消息持久化:Kafka中会把消息持久化到本地文件系统中,并且保持极高的效率。

消息有效期:Kafka会长久保留其中的消息,以便consumer可以多次消费,当然其中很多细节是可配置的。

批量发送:Kafka支持以消息集合为单位进行批量发送,以提高push效率。

push-and-pull : Kafka中的Producer和consumer采用的是push-and-pull模式,即Producer只管向broker push消息,consumer只管从broker pull消息,两者对消息的生产和消费是异步的。

Kafka集群中broker之间的关系:不是主从关系,各个broker在集群中地位一样,我们可以随意的增加或删除任何一个broker节点。

负载均衡方面: Kafka提供了一个 metadata API来管理broker之间的负载(对Kafka0.8.x而言,对于0.7.x主要靠zookeeper来实现负载均衡)。

同步异步:Producer采用异步push方式,极大提高Kafka系统的吞吐率(可以通过参数控制是采用同步还是异步方式)。

分区机制partition:Kafka的broker端支持消息分区,Producer可以决定把消息发到哪个分区,在一个分区中消息的顺序就是Producer发送消息的顺序,一个主题中可以有多个分区,具体分区的数量是可配置的。分区的意义很重大,后面的内容会逐渐体现。

三、设计思想

整体架构如下:

  Kafka 集群包含多个 broker。一个 topic 下通常有多个 partition,partition 分布在不同的 Broker 上,用于存储 topic 的消息,这使 Kafka 可以在多台机器上处理、存储消息,给 kafka 提供给了并行的消息处理能力和横向扩容能力。

消费者架构如下:

基本流程:

Consumer Group中的Consumer向各自注册的分区上进行消费消息

Consumer消费消息后会将当前标注的消费位移信息以消息的方式提交到位移主题中记录,一个Consumer Group中多个Consumer会做负载均衡,如果一个Consumer宕机,会自动切换到组内别的Consumer进行消费

关键的点:

Consumer Group:组内多个的Consumer可以公用一个Consumer Id,组内所有的Consumer只能注册到一个分区上去消费,一个Consumer Group只能到一个Topic上去消费

位移主题

位移主题的主要作用是保存Kafka消费者的位移信息

Kafka最新版本中位移主题的处理方式:

Consumer的位移信息offset会当作一条条普通消息提交到位移主题(_consumer_offsets)中。

四、运维建议

  第二类非必要 Rebalance 是 Consumer 消费时间过长导致的。所以可以估算消费这条消息后,处理的时间,设置max.poll.interval.ms大于等于这个时长多1min。

如果这些都设置好,还是出现rebalance,可以排查一下Consumer 端的 GC 表现,比如是否出现了频繁的 Full GC 导致的长时间停顿,从而引发了 Rebalance。

  将 session.timeout.ms 设置成 6s 主要是为了让 Coordinator 能够更快地定位已经挂掉的 Consumer。

  •   当生产者往主题写入消息的速度超过了应用程序验证数据的速度或者消息的数量较大,可采取横向伸缩的策略提高消费效率,分为两种:1.群组内增加消费者 2.增加消费者群组
  •   消费者组订阅某一主题时需要注意,建议:该消费组内消费者数量不要超过该主题的分区数,否则将可能产生闲置的消费者,不会接收到任何消息。
  • 消费者组订阅一个主题,主题下的每个分区只对应组中一个消费者,不会出现对应多个消费者的情况。如果分区数大于或者等于组中的消费者实例数,一个消费者会负责多个分区,建议:分区数和消费者数量相等,一个消费者负责一个分区
  • 避免重平衡

    在 Rebalance 过程中,所有 Consumer 实例都会停止消费,等待 Rebalance 完成。

    Rebalance 的弊端:

      1.Rebalance 影响 Consumer 端 TPS。(因为rebalance过程中,kafka会停止消费)

      2.Rebalance 要完成需要比较久的时间。

          3.Rebalance 效率不高,每次都要全部consumer参加。

    Rebalance 的触发条件有 3 个。

  • 组成员数发生变更。比如有新的 Consumer 实例加入组或者离开组,抑或是有 Consumer 实例崩溃被“踢出”组。99% 都是这个原因
  • 订阅主题数发生变更。Consumer Group 可以使用正则表达式的方式订阅主题,比如 consumer.subscribe(Pattern.compile(“t.*c”)) 就表明该 Group 订阅所有以字母 t 开头、字母 c 结尾的主题。在 Consumer Group 的运行过程中,你新创建了一个满足这样条件的主题,那么该 Group 就会发生 Rebalance。
  • 订阅主题的分区数发生变更。Kafka 当前只能允许增加一个主题的分区数。当分区数增加时,就会触发订阅该主题的所有 Group 开启 Rebalance。

    如何避免这99%的情况发生的rebalance?

    可以从consumer组员变化的原因分析起:

      第一类非必要 Rebalance 是因为未能及时发送心跳,导致 Consumer 被“踢出”Group 而引发的。

          当 Consumer Group 完成 Rebalance 之后,每个 Consumer 实例都会定期地向 Coordinator 发送心跳请求,表明它还存活着。如果某个 Consumer 实例不能及时地发送这些心跳请求,Coordinator 就会认为该 Consumer 已经“死”了,从而将其从 Group 中移除,然后开启新一轮 Rebalance。

          这个发送心跳的间隔在Consumer 端有个参数,叫 session.timeout.ms,默认值是 10 秒,即如果 Coordinator 在 10 秒之内没有收到 Group 下某 Consumer 实例的心跳,它就会认为这个 Consumer 实例已经挂了。session.timout.ms 决定了 Consumer 存活性的时间间隔。

          除了这个参数,Consumer 还提供了一个允许你控制发送心跳请求频率的参数,就是 heartbeat.interval.ms。这个值设置得越小,Consumer 实例发送心跳请求的频率就越高。频繁地发送心跳请求会额外消耗带宽资源,但好处是能够更加快速地知晓当前是否开启 Rebalance,因为,目前 Coordinator 通知各个 Consumer 实例开启 Rebalance 的方法,就是将 REBALANCE_NEEDED 标志封装进心跳请求的响应体中。

      Consumer 端还有一个参数,用于控制 Consumer 实际消费能力对 Rebalance 的影响,即 max.poll.interval.ms 参数,默认5min,Consumer 端应用程序两次调用 poll 方法的最大时间间隔,表示你的 Consumer 程序如果在 5 分钟之内无法消费完 poll 方法返回的消息,那么 Consumer 会主动发起“离开组”的请求,Coordinator 也会开启新一轮 Rebalance。

     所以可以修改为以下经验推荐值:

  • 设置 session.timeout.ms = 6s。
  • 设置 heartbeat.interval.ms = 2s。
  • 要保证 Consumer 实例在被判定为“dead”之前,能够发送至少 3 轮的心跳请求,即 session.timeout.ms >= 3 * heartbeat.interval.ms。

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

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

相关文章

unity - 保存camera组件图像

My project(1) “CameraImage” public class CameraImage : MonoBehaviour {// 拍摄的相机对象public Camera captureCamera ;public void CaptureScreenshot(){// 图片保存根目录string dataPath "D:/A/B";// 图片文件夹中对应的本项目文件夹string productname…

Mysql基础篇笔记

数据表 链接:https://pan.baidu.com/s/1dPitBSxLznogqsbfwmih2Q 提取码:b0rp --来自百度网盘超级会员V5的分享 sql的执行顺序 根据顺序 也就是说 select后面的字段别名 只能在order by中使用 mysql不支持sql92的外连接 mysql不支持满外连接 可以…

TS-Antd:组件使用记录

组件使用记录(持续更新) 1、Input 组件自动获得焦点1.1 InputRef 类型1.2 代码实现 1、Input 组件自动获得焦点 和普通的 input 标签不同,antd 已经给 Input 组件提供了 InputRef 类型。在 Input 组件上添加 ref ,获取到的是 Inp…

java反射常用方法

反射思维导图 使用案例 package Reflection.Work.WorkTest01;import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Arrays;public class WorkDe…

10-Nacos-灰度发布配置

用于生产上线后,针对指定主机IP做定向测试 1、在配置编辑中,勾选Beta发布,在文本框中勾选需要下发服务的IP地址,多个用英文逗号分隔。 正式版:这个是针对除了Beta版中指定的IP服务生效Beta版:灰度配置&am…

华为HCIP Datacom H12-831 卷17

1、以下关于本地LDP会话和远端LDP会话的描述,正确的有哪些项? A 本地LDP会话和远端LDP会话可以共存 B 缺省情况下,本地LDP会话发现阶段的报文目的IP为224.0.0.2 C 缺省情况下,远端LDP会话发现阶段的报文目的端口号为UDP646 D 缺省情况下,远端LDP会话发现阶段的报文…

粤Z车牌申请需要什么条件?

深圳湾口岸: 上一年度纳税数额达到15万元以上的,可以申办1个商务车指标 上一年度的纳税数额达到50万元以上的,可以申办第2个商务车指标; 上一年度的纳税数额达到100万元以上的,可以申办第3个商务车指标; 从申办第4个商务车指标起,…

yolov8:pt 转 onnx

yolov8官方教程 1.安装包 我使用的是虚拟环境,yolov8包已经下载到本地了,因此直接在anaconda prompt 命令行继续安装 首先激活自己的虚拟环境,然后执行安装命令 pip install ultralytics yolov8中没有requirement.txt文件,直接…

RTC实时时钟之读取时间

1. RTC 基本介绍 RTC(Real Time Clock) 即实时时钟,它是一个可以为系统提供精确的时间基准的元器件,RTC一般采用精度较高的晶振作为时钟源,有些RTC为了在主电源掉电时还可以工作,需要外加电池供电 2. RTC 控制器 2.1 RTC的特点是:…

知识点积累系列(四)Kubernetes篇【持续更新】

云原生学习路线导航页(持续更新中) 本文是 知识点积累 系列文章的第四篇,记录日常学习中遇到的 Kubernetes 相关的知识点 1.Kubernetes琐碎知识点 1.1.为什么要有annotations annotation中除了能够记录一些额外信息,还可以解决k…

[BUUCTF]-PWN:cmcc_pwnme2解析

保护 ida 完整exp: from pwn import* context(log_leveldebug) #premote(node5.buuoj.cn,26964) pprocess(./pwnme2) addhome0x8048644 addflag0x8048682 getfile0x80485CB main0x80486F8 pop_ebp0x8048680 ret0x80483f2 pop_ebx0x8048409 pop_edi_ebp0x804867f st…

常见的网络安全威胁和防护方法

随着数字化转型和新兴技术在各行业广泛应用,网络安全威胁对现代企业的业务运营和生产活动也产生了日益深远的影响。常见的网络安全威胁通常有以下几种: 1. 钓鱼攻击 攻击者伪装成合法的实体(如银行、电子邮件提供商、社交媒体平台等&#xf…

超越传统—Clean架构打造现代Android架构指南

超越传统—Clean架构打造现代Android架构指南 1. 引言 在过去几年里,Android应用开发经历了巨大的变革和发展。随着移动设备的普及和用户对应用的期望不断提高,开发人员面临着更多的挑战和需求。传统的Android架构在应对这些挑战和需求时显得有些力不从…

Java技术栈 —— Cookie和Session

在 Web 开发中,Cookie 和 Session 都是用于存储和管理用户状态信息的机制。 Cookie Cookie 是一小段文本数据,由服务器发送到用户的浏览器,并在浏览器中存储。 它包含了一些关于用户的信息,例如用户名、登录状态、购物车内容等。 …

WDM式驱动的基本结构3 - WDM驱动程序的AddDevice例程

AddDevice例程是WDM驱动所独有的,在NT驱动中没有该例程。在DriverEntry中,需要设置AddDevice例程的函数地址。设置的方式是驱动对象中有个 DriverExtension 子域,DriverExtension中有个AddDevice子域,将该子域指向AddDevice例程的…

笔记---中国剩余定理

全程学自y总 AcWing.204.表达整数的奇怪方式 给定 2 n 2n 2n 个整数 a a a1, a a a2,…, a a an 和 m m m1, m m m2,…, m m mn,求一个最小的非负整数 x x x,满足 ∀ i ∈ [ 1 , n ] , x ≡ m ∀i∈[1,n],x≡m ∀i∈[1,n],x≡mi ( m o d a (mod a (…

【大语言模型】大型语言模型的数据收集和预处理

前言 LLM(大型语言模型)是先进的人工智能模型,使用大量文本数据进行广泛的训练。 通过这种培训,他们学习语言结构和模式,并能够执行各种与语言相关的任务,例如摘要、翻译、情感分析等。 由于LLM具有执行以前机器难以完成的自然语言任务的卓越能力,近年来LLM受到了广泛关…

ES客户端接入方式

在 Elasticsearch (ES) 中,有两种常见的客户端接入方式:Transport Client(传输客户端)和 Node Client(节点客户端)。这两种客户端都可用于与 Elasticsearch 集群进行通信和执行操作,但它们在连接…

博科交换机常用配置命令

文章目录 1、光纤交换机IP地址查询2、什么是Zone3、创建 zone和cfg 3-1、使用 zonecreate 命令创建 zone 3-2、使用cfgcreate 命令创建cfg 3-3、使用 cfgenable 生效配置文件 3-4、使用cfgsave保存 配置文件 3-5、显示 zone 信息 4、常用后…

Backtrader 文档学习- Broker - Fillers

Backtrader 文档学习- Broker - Fillers 1. 概述 当使用交易量进行订单执行时,backtrader的模拟broker具有默认策略: 忽略交易量 (默认策略是broker忽略成交量) 基于两个前提条件:在流动性充裕的市场中进行交易&…