Kafka 记录

news2024/11/15 17:18:24

推荐资源

官网http://kafka.apache.org/
Githubhttps://github.com/apache/kafka
书籍《深入理解Kafka 核心设计与实践原理》

Kafka 架构

Kafka使用ZooKeeper作为其分布式协调框架,其动态扩容是通过ZooKeeper来实现的。Kafka使用Zookeeper保存broker的元数据和消费者信息。Kafka元数据信息包括如代理节点信息、Kafka集群信息、旧版消费者信息及其消费偏移量信息、主题信息、分区状态信息、分区副本分配方案信息、动态配置信息等。Kafka在启动或运行过程当中会在ZooKeeper上创建相应节点来保存元数据信息,Kafka通过监听机制在这些节点注册相应监听器来监听节点元数据的变化,从而由ZooKeeper负责管理维护Kafka集群,同时通过ZooKeeper我们能够很方便地对Kafka集群进行水平扩展及数据迁移。后面新版本有KRaft(Kafka Raft)代替Zookeeper。

Kafka Ecosystem 生态系统 

Kafka 核心概念

Topic

Topic:特指Kafka处理的消息源的不同分类。

Kafka的消息通过主题进行分类。(主题好比数据库中的表,或者文件系统里的文件夹)主题可以被分为若干个分区。一个分区就是一个提交日志。一个主题一般包含几个分区,因此无法在整个主题范围内保证消息的顺序,但可以保证消息在单个分区内的顺序,消息以追加的方式写入分区,然后以先入先出(消息队列)的顺序读取。为了提高效率,消息被分批次写入Kafka。批次就是一组消息,这些消息属于同一个主题(topic)和分区(Partition)。消息由字节数组组成。

Partition

Partition:Topic物理上的分组,一个Topic可以分为多个Partition,每个Partition是一个有序的队列。Partition中的每条消息都会被分配一个有序的id。

每个主题对应的分区数可以在Kafka启动时所加载的配置文件中配置,也可以在创建主题时指定。当然,客户端还可以在主题创建后修改主题的分区数。

分区使得Kafka在并发处理上变得更加容易,理论上来说,分区数越多吞吐量越高,但这要根据集群实际环境及业务场景而定。同时,分区也是Kafka保证消息被顺序消费以及对消息进行负载均衡的基础。

Kafka只能保证一个分区之内消息的有序性,并不能保证跨分区消息的有序性。每条消息被追加到相应的分区中,是顺序写磁盘,因此效率非常高,这是Kafka高吞吐率的一个重要保证。同时与传统消息系统不同的是,Kafka并不会立即删除已被消费的消息,由于磁盘的限制消息也不会一直被存储(事实上这也是没有必要的),因此Kafka提供两种删除老数据的策略,一是基于消息已存储的时间长度,二是基于分区的大小。

由于Kafka副本的存在,就需要保证一个分区的多个副本之间数据的一致性,Kafka会选择该分区的一个副本作为Leader副本,而该分区其他副本即为Follower副本,只有Leader副本才负责处理客户端读/写请求,Follower副本从Leader副本同步数据。如果没有Leader副本,那就需要所有的副本都同时负责读/写请求处理,同时还得保证这些副本之间数据的一致性,

Message

Message:消息,是通信的基本单位。每个Producer可以向一个Topic(主题)发布一些消息。

Kafka的数据单元被称为消息。(可以把消息看成是数据库里的一个“数据行”或“记录”)

Producer

Producer:消息和数据生产者。向Kafka的一个Topic发布消息的过程叫作Producer。

Consumer

Consumer:消息和数据消费者。订阅Topics并处理其发布的消息的过程叫作Consumer。

Broker

Broker:缓存代理。Kafka集群中的一台或多台服务器统称为Broker。一台Kafka服务器就是一个Broker。一个集群由多个Broker组成,一个Broker可以容纳多个Topic。

Kafka集群就是由一个或多个Kafka实例构成,我们将每一个Kafka实例称为代理(Broker),通常也称代理为Kafka服务器(KafkaServer)。在生产环境中Kafka集群一般包括一台或多台服务器,我们可以在一台服务器上配置一个或多个代理。每一个代理都有唯一的标识id,这个id是一个非负整数。在一个Kafka集群中,每增加一个代理就需要为这个代理配置一个与该集群中其他代理不同的id, id值可以选择任意非负整数即可,只要保证它在整个Kafka集群中唯一,这个id就是代理的名字,也就是在启动代理时配置的broker.id对应的值。发布与订阅系统一般有一个broker,也就是发布消息的中心点。

Broker默认的消息保留策略是这样的:要么保留一段时间(比如7天),要么保留到消息达到一定大小的字节数(比如1GB)。

Relationship Overview for Broker, Producer, Consumer, Topic, Topic Partition, Replicas, Leader and Follower

ISR & OSR

Log End Offset & WAL

ack

There are two settings here that affect the producer:

  • acks - this is a producer-level setting
  • min.insync.replicas - this is a topic-level setting

The acks property determines how you want to handle writing to kafka:

acks=0 - I don't care about receiving acknowledgment of receipt 

acks=1 - Send an acknowledgment when the leader partition has received the batch in memory

all/-1 - Wait for all replicas to receive the batch before sending an acknowledgment 

Kafka Producer Architecture and Workflow

Java code

Producer:

Consumer:

如果处理重复消息

幂等处理重复消息
幂等是数学上的概念,我们就理解为同样的参数多次调用同一个接口和调用一次产生的结果是一致的。例如这条 SQL:update t1 set money = 150 where id = 1 and money = 100; 执行多少遍 money 都是150,这就叫幂等。
因此需要改造业务处理逻辑,使得在重复消息的情况下也不会影响最终的结果。

1. 前置条件判断
可以通过像上面 SQL 一样,做个前置条件判断,即 money = 100,并且直接修改;更通用的是做个 version 即版本号控制,对比消息中的版本号和数据库中的版本号。

2. 通过数据库的约束例如唯一键,例如 insert into update on duplicate key ... 

3. 记录关键的key,例如处理订单,记录订单ID,假如有重复的消息过来,先判断下这个ID是否已经被处理过了,如果没处理再进行下一步。当然也可以用全局唯一ID等。

基本上就这么几个方式,真正应用到实际中还是得看具体业务细节。

如何保证消息不丢失

如何保证消息的有序性

消息队列的推拉模式

Kafka Admin (Setup, Operation, Monitoring)

(后续再整理)

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

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

相关文章

Ubuntu22.04 网络图标突然消失

本来好好的,突然就发现没有网络了,图标也不见了。 特别是Ubuntu虚拟机,容易出现此问题。 修复办法 1. sudo service network-manager stop2. sudo rm /var/lib/NetworkManager/NetworkManager.state3. sudo service network-manager start到…

快速理解MoE模型

最近由于一些开源MoE模型的出现,带火了开源社区,为何?因为它开源了最有名气的GPT4的模型结构(OPEN AI),GPT4为何那么强大呢?看看MoE模型的你就知道了。 MoE模型结构: 图中&#xff0…

基于单片机的自动浇花系统设计

摘要:快节奏的生活导致人们忙于工作而无暇顾及家中植物的及时浇水,影响了植物的生长发育, 也降低了其种植成功率。针对上述问题,该文设计了一种自动浇花系统,该系统能在无人环境下 根据土壤湿度情况自动启动&#xff0…

第16章_网络编程(网络通信要素,TCP与UDP协议,网络编程API,TCP网络编程,UDP网络编程,URL编程)

文章目录 第16章_网络编程本章专题与脉络1. 网络编程概述1.1 软件架构1.2 网络基础 2. 网络通信要素2.1 如何实现网络中的主机互相通信2.2 通信要素一:IP地址和域名2.2.1 IP地址2.2.2 域名 2.3 通信要素二:端口号2.4 通信要素三:网络通信协议…

Centos 7.9 安装 Veracrypt-1.26.7

1 下载 veracrypt-1.26.7-CentOS-7-x86_64.rpm VeraCrypt - Free Open source disk encryption with strong security for the Paranoid 2 切换到下载目录,打开终端,切换到管理员用户 运行 yum install veracrypt-1.26.7-CentOS-7-x86_64.rpm 3 安装完…

一文掌握 Golang 加密:crypto/cipher 标准库全面指南

一文掌握 Golang 加密:crypto/cipher 标准库全面指南 引言Golang 和加密简介crypto/cipher 库概览使用 crypto/cipher 实现加密高级功能和技巧最佳实践和性能优化总结资源推荐 引言 在现代软件开发领域,安全性是一个不容忽视的重要议题。随着信息技术的…

Java开发分析中文 ---- JProfiler 13

JProfiler 13是一款专业的Java应用程序性能分析工具,可以快速诊断和优化Java应用程序的性能问题。它支持多种操作系统和应用服务器,提供实时性能监控、CPU分析、内存分析、线程分析和数据库访问分析等功能。使用JProfiler 13可以深入了解应用程序的性能和…

修复TabbarButton 中标题展示不完全的问题

遇到一个问题,就是从列表页跳转到详情页之后,再返回的时候,tabbarbutton 中的文字变成…了 打开图层,如图所示, 标题的宽度不够了,本来是23的,返回之后变成20了。 这里就添加了一个容错&#…

Qt/C++音视频开发64-共享解码线程/重复利用解码/极低CPU占用/画面同步/进度同步

一、前言 共享解码线程主要是为了降低CPU占用,重复利用解码,毕竟在一个监控系统中,很可能打开了同一个地址,需要在多个不同的窗口中播放,形成多屏渲染的效果,做到真正的完全的画面同步,在主解码…

Linux(CentOS7)常见指令的常见用法(上)

指令功能hostname查看当前的主机名hostnamectl set-hostname修改主机名adduser添加用户passwd给用户设置密码userdel -r 删除用户ls显示某路径下的文件名ls -l ll 显示某路径下每个文件及其属性ls -la ls -al 显示某路径下所有文件包括隐藏文件及属性ls -d只看指定文件夹&…

作业车间调度问题:P还是NP

获取更多资讯,赶快关注上面的公众号吧! 文章目录 基本概念多项式时间指数时间 P问题(多项式问题)NP问题(非确定性多项式问题)暴力穷举法动态规划 P与NP关系:作业车间调度问题是典型的NP难问题 …

源码篇--Redis 通信协议

文章目录 前言一、Redis 的通信过程:二、RESP 协议:三、客户端模拟RESP 通信:总结 前言 在我们知道redis 的网络模型后,继续看下 redis 的通信协议。 一、Redis 的通信过程: Redis是一个CS架构的软件,通信…

[GXYCTF2019]禁止套娃(特详解)

刚打开页面什么都没有,抓包也什么都没有 那就dirsaerch扫一下,发现状态码都是429,访问太快了(这里很多师傅都没有说明或者说清楚) 这里改了一下线程(kali自带的,如果用的脚本要加前面要加python…

【vue】图片加载骨架

一、前言 在网速较低或者网站的服务器宽带只有几MB的情况下,网页中的图片加载时,要么空白,要么像打印机一样一行一行地“扫描”出来,为了提升用户体验,可以给图片标签外加一层骨架。 无骨架 有骨架 二、详细设计 每张…

Mysql 删除数据

从数据表中删除数据使用DELETE语句&#xff0c;DELETE语句允许WHERE子句指定删除条件。DELETE语句基本语法格式如下&#xff1a; DELETE FROM table_name [WHERE <condition>]; table_name指定要执行删除操作的表&#xff1b;“[WHERE <condition>]”为可选参数&a…

宠物用品/宠物自动饮水机方案

宠物自动饮水机方案原理 宠物自动饮水机&#xff0c;也叫做智能宠物饮水机&#xff0c;是一种为宠物设计的智能化饮水器。应用核心主要在于智能化水泵控制&#xff0c;以及外围传感器电路。 宠物自动饮水机使用方便&#xff0c;不用频繁的换水。另外&#xff0c;自来水的水质可…

二阶魔方、四阶魔方 还原公式图文教程

二阶魔方 四阶魔方 在家无聊&#xff0c;翻东西的时候看到了以前买的4阶魔方&#xff0c;就随便在网上复制了一个4阶魔方的教程&#xff0c;以免忘记。 本文四阶魔方公式图解是针对四阶魔方教程的降阶法做更多的解释和说明。 四阶魔方被认为是2-5阶魔方玩法中最不好复原的,虽…

一文说清楚仿真与数字孪生的关系

获取更多资讯&#xff0c;赶快关注上面的公众号吧&#xff01; 文章目录 何为仿真何为数字孪生 最近看群里的小伙伴在疯狂讨论数字孪生&#xff0c;今天我也谈谈自己的理解。 之前还在北航读博的时候&#xff0c;北航陶飞教授已经算是数字孪生领域的领军人物&#xff0c;也专门…

Ubuntu 隐藏Telnet主机SSH服务时显示版本信息问题

一、背景 默认情况下&#xff0c;我们通过telnet服务器的22端口&#xff0c;能够获取OpenSSH服务的banner信息(如下图所示)。而低版本的OpenSSH存在许多高危漏洞。。为了安全我们要隐藏这个信息。 二、隐藏Telnet版本信息 当使用telnet命令&#xff0c;telnet 192.168.31.20…

SeaTunnel Web安装 一把成

安装相关jar包&#xff0c;以及SeaTunnel 和Web 打成的包&#xff0c;可以直接使用&#xff0c;但是需要安装MySQL客户端的分享&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1qrt1RAX38SgIpNklbQJ7pA 提取码&#xff1a;0kmf 1. 环境准备 环境名称版本系统环境C…