《kafka 核心技术与实战》课程学习笔记(六)

news2024/11/25 10:34:59

生产者消息分区机制原理剖析

为什么分区?

  • Kafka 有主题(Topic)的概念,它是承载真实数据的逻辑容器,而在主题之下还分为若干个分区,也就是说 Kafka 的消息组织方式实际上是三级结构:主题 - 分区 - 消息。
  • 主题下的每条消息只会保存在某一个分区中,而不会在多个分区中被保存多份。
    在这里插入图片描述
  • 分区的作用就是提供负载均衡的能力
    • 对数据进行分区的主要原因,就是为了实现系统的高伸缩性(Scalability)。
    • 不同的分区能够被放置到不同节点的机器上,而数据的读写操作也都是针对分区这个粒度而进行的,这样每个节点的机器都能独立地执行各自分区的读写请求处理。
    • 并且,我们还可以通过添加新的节点机器来增加整体系统的吞吐量。
    • 除了提供负载均衡这种最核心的功能之外,利用分区也可以实现其他一些业务级别的需求,比如实现业务级别的消息顺序的问题。
  • 不同的分布式系统对分区的叫法也不尽相同。
    • 在 Kafka 中叫分区;
    • 在 MongoDB 和 Elasticsearch 中就叫分片 Shard;
    • 在 HBase 中则叫 Region;
    • 在 Cassandra 中被称作 vnode。

都有哪些分区策略?

  • 如果要自定义分区策略,你需要显式地配置生产者端的参数 partitioner.class。
    • 在编写生产者程序时,你可以编写⼀个具体的类实现 org.apache.kafka.clients.producer.Partitioner 接口。
    • 这个接口也很简单,只定义了两个方法:partition() 和 close(),通常你只需要实现最重要的 partition 方法。
    • 所谓分区策略是决定生产者将消息发送到哪个分区的算法。

轮询策略

  • Round-robin 策略,即顺序分配:
    在这里插入图片描述
  • 轮询策略是 Kafka Java 生产者 API 默认提供的分区策略。
  • 轮询策略有非常优秀的负载均衡表现,它总是能保证消息最大限度地被平均分配到所有分区上,故默认情况下它是最合理的分区策略,也是我们最常用的分区策略之一。

随机策略

  • 所谓随机就是我们随意地将消息放置到任意一个分区上。
  • Randomness 策略:
    在这里插入图片描述
  • 本质上看随机策略也是力求将数据均匀地打散到各个分区,但从实际表现来看,它要逊于轮询策略,所以如果追求数据的均匀分布,还是使用轮询策略比较好。

按消息键保序策略

  • Kafka 允许为每条消息定义消息键,简称为 Key。
  • 一旦消息被定义了 Key,那么你就可以保证同一个 Key 的所有消息都进入到相同的分区里面,由于每个分区下的消息处理都是有顺序的,故这个策略被称为按消息键保序策略:
    在这里插入图片描述
  • 实现这个策略的 partition 方法只需要两行代码即可:
    List<PartitionInfo> partitions = cluster.partitionsForTopic(topic);
    return Math.abs(key.hashCode()) % partitions.size();
    
  • Kafka 默认分区策略实际上同时实现了两种策略:如果指定了 Key,那么默认实
    现按消息键保序策略;如果没有指定 Key,则使用轮询策略。

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

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

相关文章

[CKA]考试之四层负载均衡service

由于最新的CKA考试改版&#xff0c;不允许存储书签&#xff0c;本博客致力怎么一步步从官网把答案找到&#xff0c;如何修改把题做对&#xff0c;下面开始我们的 CKA之旅 题目为&#xff1a; Task 重新配置一个已经存在的front-end的deployment&#xff0c;在名字为nginx的容…

spring boot 整合EasyPoi导入导出,下载模版功能

引入依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.5.RELEASE</version><relativePath/> <!-- lookup parent from repository --></…

【算法题】链表系列之从尾到头打印链表、重建二叉树、用两个栈实现队列

【算法题】链表系列 一、从尾到头打印链表1.1、题目描述1.2、递归法1.3、栈&#xff08;stack&#xff09; 二、重建二叉树2.1、题目描述2.2、前置知识&#xff1a;2.3、分治算法2.4、小结 三、用两个栈实现队列3.1、题目描述3.2、双栈法3.3、小结 总结 一、从尾到头打印链表 …

从零开始 Spring Boot 48:JPA Hibernate

从零开始 Spring Boot 48&#xff1a;JPA & Hibernate 图源&#xff1a;简书 (jianshu.com) 对象关系映射&#xff08;ORM&#xff09;是将Java对象转换为数据库表的过程。换句话说&#xff0c;这允许我们在没有任何SQL的情况下与关系数据库进行交互。Java Persistence AP…

Redis入门(4)-list

redis中list数据会按照插入顺序进行排序&#xff0c;其底层是一个无头结点的双向链表&#xff0c;因此表头和表尾的操作性能较高&#xff0c;但中间元素操作性能较差。 1.lpush key element [element ] 从表头插入元素 lpush nosql redis hbase lpush nosql mongdb2.lrange…

信息熵、条件熵、信息增益

一、信息熵 其中&#xff1a; &#xff1a;样本属于第i个类别的概率 &#xff1a;总样本数 &#xff1a;集合 中属于第 个类别的样本个数 二、条件熵 其中&#xff1a; &#xff1a;属性 的取值个数 &#xff1a;选出属性 取值等于 的样本集合 三、信息增益 信息增…

安全防御 --- IPSec理论(03)

DPD 死亡对等体检测&#xff08;dead peer detection&#xff09;&#xff0c;检查对端IKE SA&#xff08;iskmp sa&#xff09;是否存在。当隧道出现异常&#xff0c;检测出异常重新发起协商&#xff0c;维持隧道。 作用&#xff1a;DPD解决隧道黑洞问题&#xff0c;用于检查…

Docker搭建Hadoop集群

目录 1.拉取centos镜像 2.基础镜像配置(基于centos构建hadoopbase镜像) 3.集群环境配置 1.创建3个容器 2.配置网络 3.配置主机和ip的映射关系 4.配置3个节点的免密登录 4.搭建hadoop集群 1.安装hadoop 2.修改配置文件 3.分发Hadoop及配置文件my_env.sh 5.启动集群 …

使用CLion创建Cmake项目,使用GoogleTest和GoogleMock对代码进行测试

文章目录 1、环境准备2、CLion创建项目3、编写测试用例4、复杂测试用例 1、环境准备 注意版本匹配&#xff0c;我本地是g 8.1.0 的&#xff0c;最开始装了GoogleTest最新版1.10.0结果发现不能用&#xff0c;又回去下载旧的版本。g 8.1.0 应该可以使用 Google Test 1.8.1 版本。…

HLW8032交流电参数模块采样原理讲解

目录 一、文章概述 二、采样说明 1.采样方式 1.1隔离采样 电流型电压互感器&#xff1a; 1.2非隔离采样 2.采样范围 3.采样精度 三、数据说明 四、HLW8032模块说明 一、文章概述 本博文主要讲解HLW8032交流电参数模块的采样原理以及设计说明&#xff0c;才疏学浅&am…

微服务系列文章之 SpringCloud面试

1、什么是 Spring Cloud&#xff1f; Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序&#xff0c;提供与外部系统的集成。Spring cloud Task&#xff0c;一个生命周期短暂的微服务框架&#xff0c;用于快速构建执行有限数据处理的应用程序。 2、使…

团体程序设计天梯赛-练习集L2篇⑦

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;Hello大家好呀&#xff0c;我是陈童学&#xff0c;一个与你一样正在慢慢前行的普通人。 &#x1f3c0;个人主页&#xff1a;陈童学哦CSDN &#x1f4a1;所属专栏&#xff1a;PTA &#x1f381;希望各…

奇异值分解MVDR算法功率谱估计MATLAB完整程序分享

clear ;close all;clc; 产生输入信号 N 1024; %样本点数 snr[20 25 30]; %信噪比 n0:N-1; %数据轴 g100; %蒙特卡诺仿真次数 M14; %阶数 Pmvdr_szeros(3,1024); %存放MVDR谱 signal1 exp(1i*0.1…

Oracle-DG备库应用查询不到数据问题处理

背景: 一套准备上线的Oracle 11G RAC主备集群&#xff0c;应用报告说部分模块测试发现在备库查不到新插入的数据&#xff0c;而且问题发生的频率很高&#xff0c;需确认主备之间同步是否存在问题&#xff0c;此套主备之间同步采用SYNCAFFIRM模式 问题分析: 接到问题之后&#…

2022(二等奖)C2464植物保护管理系统

作品介绍 一、需求分析 1. 应用背景 森林是陆地生态系统的主体&#xff0c;是人类生存与发展的物质基础。以森林为主要经营对象的林业&#xff0c;不仅承担着生态建设的主要任务&#xff0c;而且承担着提供多种林产品的重大使命。进入21世纪&#xff0c;人类正在继农业文明和…

libevent(12)bufferevent的基础知识

一、bufferevent的基本概念 bufferevent 是 libevent 中的一个事件缓冲 IO&#xff0c;内部实现了基本 socket recv/send 操作 &#xff0c;用户只需要调用 bufferevent 的 API 即可实现数据的读写。 &#xff08;1&#xff09;缓冲区&#xff1a;每个 bufferevent 都有一个读…

Effective第三版 中英 | 避免使用终结方法和清理方法

文章目录 Effective第三版前言避免使用终结方法和清理方法&#xff08;Avoid finalizers and cleaners&#xff09;总结 Effective第三版 前言 大家好&#xff0c;这里是 Rocky 编程日记 &#xff0c;喜欢后端架构及中间件源码&#xff0c;目前正在阅读 effective-java 书籍。…

基于SpringBoot+vue的家乡特色推荐系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

【C语言督学训练营 第十五天】常用的查找算法----顺序查找、二分查找、二叉排序树

文章目录 前言一、顺序查找1,思想2.代码实战 二、二分查找1.思想2.代码实战 三、二叉排序树1.建树思想2.删除节点思想3.代码实战 考研真题实战 前言 本篇博客会介绍到数据结构中常用到的查找算法&#xff0c;合理的使用查找算法可以让我们很轻松找到自己想要的答案。本小节必须…

Java异常面试题

什么是Java异常机制 Java异常机制是java语言为我们提供一种异常处理机制&#xff0c;在java语言中&#xff0c;异常本身是一个类&#xff0c;产生异常就是创建异常对象并抛出这个异常对象&#xff0c;程序发生异常情况之后程序会抛出封装了错误信息的异常对象&#xff0c;程序…