当前位置: 首页 > news >正文

kafka第二篇——主题创建,主题分区副本分配策略

目录

主题创建

引入 

回顾主题,分区,副本关系 

代码 

主题分区副本分配策略

底层逻辑分析 


主题创建

引入 

为啥才开始在idea上跑代码,topic都没创建出来,就直接跑出来了?

这是因为AutoTopicCreationManger参数可以自动创建主题,但是这往往不是我们想要的。

Admin 是 Kafka 客户端库中的一个类,它提供了与 Kafka 集群进行管理交互的功能。通过 Admin,你可以执行一些管理操作,如创建主题、删除主题、列出主题、修改配置等。Admin.create()

topic的三个参数

回顾主题,分区,副本关系 

主题包含一个或多个分区,每个分区在集群中有多个副本(Replica)分布在不同的 Broker 上。通过合理设计主题、分区和副本的布局,Kafka 可以实现高吞吐量、低延迟和可靠性的分布式消息传递系统。可以看文章kafka1中的架构推演发展历程标题下的内容。

1. **主题(Topic)**:- 主题是消息的逻辑容器,用于将相关的消息组织在一起。生产者(Producer)将消息发布到特定的主题,而消费者(Consumer)则订阅并从主题中接收消息。- 一个主题可以拥有多个分区,主题的消息会被分发到不同的分区中,以实现消息的水平扩展和并行处理。2. **分区(Partition)**:- 分区是主题的物理存储单元,每个主题可以被划分为一个或多个分区。分区内的消息是有序的,但整个主题内的消息顺序不保证。- 分区的作用是将数据分散存储在不同的 Broker 上,以便实现水平扩展和负载均衡。每个分区在集群中都有多个副本(Replica)进行备份,以确保数据的可靠性和容错性。3. **Broker**:- Broker 是 Kafka 集群中的每个节点(服务器),负责存储分区副本、处理生产者和消费者的请求,以及数据的复制和分发。- 每个 Broker 可以存储一个或多个分区的副本,当生产者发送消息时,消息会被写入对应分区的 Leader 副本,然后通过副本同步机制复制到其他副本。- 生产者和消费者通过与 Broker 进行通信来发送和接收消息,Broker 之间也会进行数据的同步和复制,以保持数据的一致性和可用性。综上所述,主题包含一个或多个分区,每个分区在集群中有多个副本(Replica)分布在不同的 Broker 上。通过合理设计主题、分区和副本的布局,Kafka 可以实现高吞吐量、低延迟和可靠性的分布式消息传递系统。

代码 

import org.apache.kafka.clients.admin.Admin;
import org.apache.kafka.clients.admin.AdminClientConfig;
import org.apache.kafka.clients.admin.NewTopic;import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutionException;public class AdminTopicTest {public static void main(String[] args) {// 配置Kafka集群的Bootstrap服务器地址Map<String, Object> confMap = new HashMap<>();confMap.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");// 创建Admin对象try (Admin admin = Admin.create(confMap)) {// 创建主题名称String topicName = "my-new-topic";int numPartitions = 3; // 分区数short replicationFactor = 1; // 副本因子// 构建新主题NewTopic newTopic = new NewTopic(topicName, numPartitions, replicationFactor);// 创建主题admin.createTopics(Arrays.asList(newTopic)).all().get();System.out.println("Topic created successfully");} catch (InterruptedException | ExecutionException e) {e.printStackTrace();System.err.println("Failed to create topic");}}
}

pom.xml 

<dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>2.8.0</version> <!-- 使用最新稳定版本 -->
</dependency>

主题分区副本分配策略

 原本

理想状态

kafka内部真实状态

来看kafka的内部实现

所以试试自己更改

底层逻辑分析 

controller启动后会同时启动副本状态机和分区状态机没总结完,后续补充

相关文章:

  • PWR电源控制
  • IDEA services模块无法启动springboot服务(添加了springboot但是为空白)
  • HTTP/2 的 ALPN(应用层协议协商)
  • 【前端】Git 常用
  • C语言| 宏定义
  • Python 学习 第四册 第10章 系统(2)
  • OpenCV图像变换
  • React的State和setState
  • Flink——最流批的大数据框架(流批一体)
  • 【Unity学习笔记】第十八 基于物理引擎的日月地系统简单实现
  • java智慧工地系统源码 智慧工地标准之一:环境监测 告别灰头土脸、智慧工地环境监测系统都包括哪些功能?
  • ThinkPHP6图书借阅管理系统
  • 基于uni-app和图鸟UI的智慧农业综合管控平台小程序技术实践
  • vue实现的商品列表网页
  • 第二篇: 掌握Docker的艺术:深入理解镜像、容器和仓库
  • Brief introduction of how to 'Call, Apply and Bind'
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • JavaScript函数式编程(一)
  • js写一个简单的选项卡
  • markdown编辑器简评
  • Mysql5.6主从复制
  • PHP的Ev教程三(Periodic watcher)
  • 测试如何在敏捷团队中工作?
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 前端相关框架总和
  • 前嗅ForeSpider中数据浏览界面介绍
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 阿里云服务器如何修改远程端口?
  • ​2021半年盘点,不想你错过的重磅新书
  • ​Redis 实现计数器和限速器的
  • ## 基础知识
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • ${ }的特别功能
  • (13):Silverlight 2 数据与通信之WebRequest
  • (第27天)Oracle 数据泵转换分区表
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (图)IntelliTrace Tools 跟踪云端程序
  • .form文件_SSM框架文件上传篇
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .net Stream篇(六)
  • .net 无限分类
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .NET单元测试
  • .NET开发人员必知的八个网站
  • .NET命令行(CLI)常用命令
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • [ solr入门 ] - 利用solrJ进行检索
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [30期] 我的学习方法
  • [AR]Vumark(下一代条形码)
  • [Ariticle] 厚黑之道 一 小狐狸听故事
  • [BUUCTF NewStarCTF 2023 公开赛道] week4 crypto/pwn