首页 > 其他分享 >kafka权威指南

kafka权威指南

时间:2024-05-17 14:08:19浏览次数:13  
标签:指南 消费者 权威 主题 broker kafka 消息 分区

消息有字节数组组成

消息Key也是一个字节数组

根据消息key的哈希码进行取模后写入不同分区,保证具有相同key的消息总是被写入到相同分区中

为了提供消息写入效率,支持消息的分批次写入,批次就是一组消息,每个批次的消息输入同一个主体和分区

为了减少网络消耗,批次数据会被压缩

kakfa使用AVRO格式进行消息的序列化,支持向后兼容

 

主体与分区

消息以主题进行分类

主题可以被分为多个不同分区,一个分区就是一个提交日志,

消息以追加方式写入分区。

消息被追加到每个分区的尾部。

消息在一个分区中可以被先入先出的方式被读取。

一个主题可以包含多个分区,因此无法保证整体主题范围内的顺序,但是可以保证消息在单个分区内的顺序。

kafka通过分区实现数据冗余和伸缩性。

分区可以分布到不同服务器上。

一个主题可以跨多个服务器。

 

生产者与消费者

默认情况下消息会被均匀分布到主题下的所有分区上。

消息可以被写入到指定分区上,需要通过消息键和分区器来实现。

分区器为消息生成一个散列值,并将期映射到指定的分区上,这样保证了同一个key的消息被写入到同一个分区中。

消费者可以订阅一个或者多个主题,并且按照消息生成的顺序读取消息。

消费者通过检查消息的偏移量来区分是否已读取过的消息。

偏移量是一种元数据,是一个不断底层的整数值,在创建消息会把偏移量写入消息中。

每个分区中偏移量都是唯一的。

消费者把每个分区最后读取的偏移量保存在zookeeper或者kafka中。

多个消费者组成一个消费组。

消费组保证每个分区只能被一个消费者消息。

所有权:消费者与分区的关系映射。

如果一个消费者失效,消费组中的其他消费者会接管失效消费者的工作。

一个独立的kafka被称为一个broker。

broker接收消息,并为消息设置偏移量,并提交消息到磁盘保存。

broker是集群的一部分。

每个集群都有一个broker作为“集群管理器”的角色。

集群中,一个分区从属于一个broker,这个broker称为分区首领。

一个分区可以分配给多个broker,这时会发生分区复制。

消息可以被保存在磁盘中,可以设置消息在磁盘中的流程时间,7天或者一个月等。

消息在保存在磁盘中,可以设置保留时间或者字节大小。

过期的消息从磁盘中删除掉。

kakfa支持多个消费者读取同意主题,并且相互直接不影响。

消费组保证每个消息只被处理一次。

kafka支持消费者非实时的读取消息,主要归功于消息可以被保存到磁盘中。

 

kakfa与zookeeper

kafka使用zookeeper保存集群的(broker、主题、分区)元数据、消费信息。

由于zookeeper使用了一致性协议,如果zookeeper节点过多会降低集群的性能。

 

broker常规配置参数

broker.id、port、zookeeper.connect

log.dirs:kafka消息保存在磁盘中的路径

num.recovery.threads.per.data.dir:使用配置的线程数量打开或者关闭日志片段。

创建主题时机:生成消息时、消费消息时、客户端向主图发送元数据请求时

 

主题常规配置

每个主题包含的分区数量

消息被保留在磁盘中的时间,默认一周(日志片段最后修改时间)

消息被保留在磁盘中的大小限制,默认每个分区1G。

log.segement.bytes:日志片段大小限制,例如设置为1G时,如果日志片段达到1G后,会创建一个新日志片段。

message.max.bytes:限制单个消息大小,默认1M

 

垃圾回收器选项

默认使用G1回收器

可以设置最大暂停时间

每轮垃圾回收前可以使用的堆内存百分比。

 

发送消息三种方式

发送并忘记:无法保证消息不丢失

同步发送:同步阻塞,有Future

异步发送:支持回调

 

发送消息到kafka

生产者调用send方法发送消息,需要指定主题和key值对象。

消息先被发放进缓冲区中,然后使用单独线程发送到服务器端。

需要捕获消息发送的异常信息,尽心重试

 

生产者配置

可靠性确认参数acks:

acks=0:无需等待来自kafka的确认消息

acks=:只要集群的首领节点确认,生产者会收到一个来自服务器的确认消息。

acks=all:需要所有参与复制节点的全部确认消息,生产者才会收到一个来自服务器的确认消息。

buffer.memory:生产者内存缓冲区大小,生产者使用它缓冲要发送到服务器的消息。

压缩类型

重试次数

batch.size:批次数量

发送消息的大小

tcp socket接收和发送数据包的缓冲区大小。

 

分区

key为null时,分区器使用轮训算法发送消息到各个分区中。

key有值时,根据key的散列值路由到各个分区中。

建议在创建主题时同步把分区创建

 

消费者与消费者群里

每个消费者从属于一个消费者群组。

可以多个消费者对同一个主题读取消息,对消息进行分流。

一个消费者群组里的消费者订阅的都是同一个主题,每个消费者接收主题的一部分分区的消息。

消费者群里中增加消费者提现了横向伸缩能力。

分区再均衡:分区的所有权从一个消费者变更到其他消费者时,会发生再均衡。

分区再均衡阶段消费者无法读取消息,造成整个消费者集群一小段时间不可用。

消费者通过向broker中指定的协调器发送心跳方式,来维护消费者与群组之间的从属关系。

 

标签:指南,消费者,权威,主题,broker,kafka,消息,分区
From: https://www.cnblogs.com/use-D/p/18197619

相关文章

  • 渗透测试快速启动指南-全-
    渗透测试快速启动指南(全)原文:QuickStartGuidetoPenetrationTesting协议:CCBY-NC-SA4.0一、NMAP简介漏洞评估和渗透测试变得越来越重要,尤其是在最近几年。组织通常拥有存储敏感数据的复杂资产网络。这些资产暴露在来自组织内部和外部的潜在威胁之下。为了全面了解组织......
  • kafka安装(windows)
    首先安装zookeeper,kafka启动前需要先启动Zookeeper。1、官网下载kafka,解压https://kafka.apache.org/downloads2、配置安装1、进入D:\Study_Tool\kafka\config目录,找到zookeeper.properties文件。创建一个data目录,用于存放zookeeper的数据文件。2、找到server.properties......
  • Flink同步kafka到iceberg(cos存储)
    一、flink到logger1、sourcecreatetablesource_table(idbigintcomment'唯一编号',order_numberbigintcomment'订单编号',update_timestamptimestamp_ltzmetadatafr......
  • 轻松突破网络限制:一站式内网穿透实战指南
    一、内网穿透技术概述内网穿透技术允许外部网络通过安全隧道访问内部网络资源。这种技术通过在内外网之间建立一个安全的穿透隧道,将外部网络的连接请求转发到内部网络的目标设备上,从而实现了外部网络对内网资源的访问。二、内网穿透的工作流程服务端启动:在内部网络中,选择......
  • 教你如何搞定springboot集成kafka
    本文分享自华为云社区《手拉手入门springboot+kafka》,作者:QGS。安装kafka启动Kafka本地环境需Java8+以上Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。Kafka启动方式有Zookeeper和Kraft,两种方式只能选择其中一种启动,不能同时使用......
  • React-路由快速启动指南-全-
    React路由快速启动指南(全)原文:zh.annas-archive.org/md5/64054E4C94EED50A4AF17DC3BC635620译者:飞龙协议:CCBY-NC-SA4.0前言Facebook的React框架重新定义了前端应用程序的构建方式。ReactRouter已成为使用React构建的应用程序的事实标准路由框架。通过其最新的4......
  • NuxtJS-Web-开发实用指南-全-
    NuxtJSWeb开发实用指南(全)原文:zh.annas-archive.org/md5/95454EEF6B1A13DFE0FAD028BE716A19译者:飞龙协议:CCBY-NC-SA4.0前言Nuxt.js(本书中将其称为Nuxt)是建立在Vue.js之上的渐进式Web框架(本书中将其称为Vue)用于服务器端渲染(SSR)。使用Nuxt和Vue,构建通用和静态生......
  • Vue-快速启动指南-全-
    Vue快速启动指南(全)原文:zh.annas-archive.org/md5/056a1fe7509ea158cc95e0fe373880b7译者:飞龙协议:CCBY-NC-SA4.0前言直到几年前,直接DOM操作是前端开发的标准,jQuery一直引领潮流。所有这一切都随着现代JavaScript库和框架的普及而开始改变,主要是Angular和React。......
  • VueJS2-学习指南-全-
    VueJS2学习指南(全)原文:zh.annas-archive.org/md5/0B1D097C4A60D3760752681016F7F246译者:飞龙协议:CCBY-NC-SA4.0前言这本书是关于Vue.js的。我们将开始我们的旅程,试图理解Vue.js是什么,它与其他框架相比如何,以及它允许我们做什么。我们将在构建小型有趣的应用程序的同......
  • Vue-与-GraphQL-应用构建指南-全-
    Vue与GraphQL应用构建指南(全)原文:zh.annas-archive.org/md5/60CC414A1AE322EC97E6A0F8A5BBE3AD译者:飞龙协议:CCBY-NC-SA4.0前言自2012年Facebook发布以来,GraphQL已经席卷了互联网。像Airbnb和Audi这样的大公司已经开始采用它,而中小型公司现在也意识到了这种基......