关于 Kafka 分区程序的关键细节

news2024/11/27 6:31:48

Apache Kafka 是当今事件流的事实标准。Kafka 如此成功的部分原因是它能够处理大量数据,每秒吞吐量达到数百万条记录,这在生产环境中并非闻所未闻。Kafka设计的一部分使这成为可能,那就是分区。

Kafka 使用分区将数据负载分散到集群中的代理之间,它也是并行性的单元;更多的分区意味着更高的吞吐量。由于 Kafka 使用键值对,因此在同一分区上获取具有相同键的记录至关重要。

考虑一个银行应用程序,它使用客户 ID 生成给 Kafka 的每笔交易。将所有这些事件放在同一个分区上至关重要;这样,使用者应用程序将按照记录到达的顺序处理记录。保证具有相同键的记录在正确分区上的机制是一个简单但有效的过程:取键模的哈希值为分区数。下图显示了这个概念的实际应用:

在高级别上,CRC32 或 Murmur2 等哈希函数接受输入并生成固定大小的输出,例如 64 位数字。相同的输入总是产生相同的输出,无论是用Java,Python还是任何其他语言实现的。分区程序使用哈希结果一致地选择分区,因此相同的记录键将始终映射到相同的 Kafka 分区。我不会在这个博客中详细介绍,但知道有几种哈希算法可用就足够了。

我今天想讨论的不是分区是如何工作的,而是 Kafka 生产者客户端中的分区程序。创建者使用分区程序来确定给定键的正确分区,因此在创建者客户端中使用相同的分区程序策略至关重要。

由于创建者客户端具有默认分区程序设置,因此此要求应该不是问题。例如,当将 Java 生产者客户端与 Apache Kafka 发行版一起使用时,该类提供了一个默认分区程序,该分区程序使用 Murmur2 哈希函数来确定给定键的分区。KafkaProducer

但是其他语言的 Kafka 生产者客户端呢?优秀的librdkafka项目是Kafka客户端的C/C++实现,广泛用于非JVM Kafka应用程序。此外,其他语言(Python,C#)的Kafka客户端构建在它之上。librdkafka 的默认分区程序使用 CRC32 哈希函数来获取密钥的正确分区。

这种情况本身不是问题,但很容易成为问题。Kafka 代理与客户端的语言无关;只要它遵循 Kafka 协议,您就可以使用任何语言的客户端,并且代理很乐意接受他们的生产和消费请求。鉴于今天的多语言编程环境,你可以让组织内的开发团队使用不同的语言工作,比如Python和Java。但是在没有任何变化的情况下,两组将以不同的哈希算法的形式使用不同的分区策略:使用 CRC32 的 librdkafka 生产者和使用 Murmur2 的 Java 生产者,因此具有相同键的记录将登陆不同的分区!那么,这种情况的补救措施是什么?

Java 仅通过默认分区程序提供一种哈希算法;由于实现分区程序很棘手,因此最好将其保留为默认值。但是 librdkafka 生产者客户端提供了多个选项。其中一个选项是murmur2_random分区程序,它使用 murmur2 哈希函数并将空键分配给随机分区,这与 Java 默认分区程序的行为相当。KafkaProducer

例如,如果在 C# 中使用 Kafka 创建器客户端,则可以使用以下行设置分区策略:

C#
1
ProducerConfig.Partitioner = Partitioner.Murmur2Random;.Partitioner = Partitioner.Murmur2Random;

现在,您的 C# 和 Java 生产者客户端使用兼容的分区方法!

使用非 Java Kafka 客户机时,启用与 Java 创建器客户机相同的分区策略是一个很好的主意,以确保所有生成者对不同的键使用一致的分区。

 

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

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

相关文章

UFT描述性编程及综合练习

1、录制登录操作改描述性编程。 登录的用户名、密码在global表中给出。有2组:自己的学号/mercury,自己的学号/123456。将登录的本地对象库清空。 要求: 分别采用直接描述性编程和Description描述性编程实现2组数据登录测试,用repo…

pikvm系统主要软件包解析备忘

PI-KVM让普通家用PC也有能够像数据中心机房里面的IP-KVM一样的功能。 详细信息参考官网:PiKVM HandbookOpen and cheap DIY IP-KVM on Raspberry Pihttps://docs.pikvm.org/ nullOpen and inexpensive DIY IP-KVM based on Raspberry Pi - GitHub - pikvm/pikvm: O…

LeetCode - 34 在排序数组中查找元素的第一个和最后一个位置

目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode) 题目描述 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在…

【项目笔记】若干基本社团发现算法介绍

两个衡量指标:边介数 & 模块度 边介数计算: 以下用图来自:https://blog.csdn.net/weixin_44704845/article/details/102686597 选择S为源节点对图搜索,画出S到其他节点的最短路径树 2.给边标数字 1) 所有邻近叶…

【YOLO系列】--YOLOv4超详细解读/总结(网络结构)

YOLOv4(YOLOv4: Optimal Speed and Accuracy of Object Detection)(原文+解读/总结+翻译) 系列文章: YOLOv1论文解读/总结_yolo论文原文_耿鬼喝椰汁的博客-CSDN博客 YOLOv2论文解读/总结_耿鬼…

软件测试面试至今0 offer,问题到底出在哪儿?

转眼已是四月中旬,求职招聘季也快要结束啦,如果没点真技术 真本事,不了解点职场套路,在今年行情下,找工作可是难上加难。 现在点开微博或者脉脉,只要搜索“招聘”,用“惨不忍睹”来形容也不为过…

【数据结构】经典排序

【数据结构】八大排序 1. 排序的概念和运用1.1 概念1.2 运用 2. 常规的排序算法介绍一. 插入排序1.1 直接插入排序1.2 希尔排序 二. 选择排序2.1 选择排序2.2 堆排序 三. 交换排序3.1 冒泡排序3.2 快速排序3.2.1 Hoare法3.2.2 挖坑法3.2.3 前后指针/左右指针法3.2.4 分治法/递归…

windows11 安装 webassembly,遇到的各种错误

1.最开始是尝试在 虚拟机 centos 7 安装的(因为不想安装vs2015) 但是无奈 各种错误.最终无法解决. 2.尝试在windows安装,吐槽一下官方文档 的安装提示是错误的(太老了) 参考以下文章: https://blog.csdn.net/weixin_45482422/article/details/119459918 https://blog.csdn.…

C++中this指针的特性,存放位置,能否为空?

文章目录 一、this指针的特性二、this指针存在哪里?三、this指针可以为空吗? 一、this指针的特性 我们学习过C知道,成员函数没有直接存放在类而是放在了公共代码区,这样当多个对象调用同一个函数就不需要再创建一个函数成员了。 …

libevent高并发网络编程 - 02_libevent缓冲IO之bufferevent

文章目录 1. 为什么需要缓冲区?2. 水位3. bufferevent常用API3.1 evconnlistener_new_bind()3.2 evconnlistener_free()3.3 bufferevent_socket_new()3.4 bufferevent_enable()3.5 bufferevent_set_timeouts()3.6 bufferevent_setcb()3.7 bufferevent_setwatermark(…

全面解析Linux指令和权限管理

目录 一.指令再讲解1.时间相关的指令2.find等搜索指令与grep指令3.打包和压缩相关的指令4.一些其他指令与热键二.Linux权限1.Linux的权限管理2.文件类型与权限设置3.目录的权限与粘滞位 一.指令再讲解 1.时间相关的指令 date指令: date 用法:date [OPTION]… [FOR…

缓冲区的flip

流和缓冲区都是用来描述数据的。计算机中,数据往往会被抽象成流,然后传输。比如读取一个文件,数据会被抽象成文件流;播放一个视频,视频被抽象成视频流。处理节点为了防止过载,又会使用缓冲区削峰&#xff0…

巴西大神开发的 ARPL 黑群晖DSM系统引导在线编译工具

ARPL 是一款黑群晖系统引导在线编译工具,目前支持最新群晖系统DSM 7.1.1,今天为了折腾升级这个群晖系统DSM 7.1.1浪费了一天的时间,ARPL是巴西人一位大神开发的黑群晖系统引导在线编译工具,使用下来非常的不错,可惜没有…

3网络互联-3.4【实验】【计算机网络】

3网络互联-3.4【实验】【计算机网络】 前言推荐3网络互联3.4 IP分组转发与静态路由实验目的实验内容及实验环境实验原理1.路由器2.路由(Routing)3.IP分组的转发4.路由的构建5.静态路由设计原则 实验过程1.搭建一个仅包含直连路由的网络拓扑,观察路由器的…

时间序列分析

一、移动平均法 1.一次移动平均法 公式: 预测标准误差: 本质:用前N次数据预测t1期的数据 规律:如果实际数据波动较大,N值越大,预测到的数据波动越小 注意:一般不适用于波动较大的数据。用一次移动平均法…

Kafka原理之消费者

一、消费模式 1、pull(拉)模式(kafka采用这种方式) consumer采用从broker中主动拉取数据。 存在问题:如果kafka中没有数据,消费者可能会陷入循环中,一直返回空数据 2、push(推)模式 由broker决定消息发送频率,很难适应所有消费者…

【MySQL】 InnoDB

学习笔记,来源黑马程序员MySQL教程 文章目录 逻辑存储结构架构内存架构磁盘结构后台线程 事务原理概述redo logundo log MVCC基本概念实现原理1、隐藏字段2、undo log3、readview 总结 逻辑存储结构 一个表空间对应一张表一 页 对应B树上一个 节点Trx id&#xff1a…

Git cat命令的用法

cat (全称 concatenate) 命令是 Linux/类 Unix 操作系统中最常用的命令之一。cat 命令允许我们创建单个或多个文件、查看文件内容、连接文件和重定向终端或文件中的输出。 语法: cat [OPTION] [FILE]...1.终端查看一个文件内容 cat file01.txt2.终端查看多个文件…

熵、信息量、条件熵、联合熵、互信息简单介绍

熵、信息量、条件熵、联合熵、互信息简单介绍 近期在看对比学习论文,发现有不少方法使用了互信息这种方式进行约束,故在此整理一下网上查阅到的关于互信息的相关内容。 一、熵、信息量 关于熵的讨论,这个知乎专栏写的挺不错的。 熵在信息论…

【更新日志】填鸭表单TduckPro v5.1 更新

hi,各位Tducker小伙伴。 填鸭表单pro迎来了v5.1版本;本次我们进行了许多的功能新增和优化,能够让我们在日常使用中获得更好的体验。 让我们一起来康康新功能吧。 01 新增Pro功能 新增登录后才能填写表单。 新增表单卡片一键发布。 新增矩…