热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

kafka利用zookeeper干了什么

Kafka与zk的关系及连接参数bootstrap.server的正确理解zk在kafka中的作用kafka消费组如上图所示,kafka的运行离不开zookeep

Kafka与zk的关系及连接参数bootstrap.server的正确理解

zk在kafka中的作用

kafka消费组

在这里插入图片描述
如上图所示,kafka的运行离不开zookeeper,主要在以下方面依赖zookeeper:

集群和生产者相关

1,集群管理,broker的动态上下线。

每个broker在启动成功后会在zookeeper建立临时节点,controller节点监听节点的变化,完成leader的重新选举和消费者的重新负载均衡。

broker上线前在zookeeper中查看:

[zk: localhost:2181(CONNECTED) 79] ls /brokers/ids
[]

broker上线后:

[zk: localhost:2181(CONNECTED) 80] ls /brokers/ids
[0, 1, 2]

保存这个各个broker的地址信息。

2,各个topic的分区信息

[zk: localhost:2181(CONNECTED) 70] get /brokers/topics/input-kafka
{"version":2,"partitions":{"2":[0,1,2],"1":[2,0,1],"0":[1,2,0]},"adding_replicas":{},"removing_replicas":{}}

如上,topic:input-kafka包括三个分区,每个分区有三个副本,还标明了每个分区所在broker信息,如分区“2”分别存放在三个不同的broker上:[0,1,2]

3,分区信息信息、leader信息、leader-follower同步组信息

topic的分区信息:

[zk: localhost:2181(CONNECTED) 82] ls /brokers/topics/input-kafka/partitions
[0, 1, 2]

各个分区的副本信息、leader、leader-follower同步组信息

[zk: localhost:2181(CONNECTED) 84] get /brokers/topics/input-kafka/partitions/0/state
{"controller_epoch":250,"leader":2,"version":1,"leader_epoch":46,"isr":[2,0,1]}
cZxid = 0xa200000110
ctime = Sat Jun 05 23:27:02 HKT 2021
mZxid = 0xb8000001c8
mtime = Fri Jun 25 18:36:08 HKT 2021
pZxid = 0xa200000110
cversion = 0
dataVersion = 76
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 79
numChildren = 0

  • “isr”:[2,0,1] 表示三个副本都是同步的,这里解释下同步的意思,因为是分布式,leader分片写入成功后,副本分片会从leader拉取数据,这中间会有时间延迟,默认是10s,在10s之后follower和leader仍然不同步,则会被溢出isr队列

  • 生产者会获取分区信息,拿到各个分区的leader信息,根据负载均衡策略向broker写入消息


消费者相关

注意,消费相关在kafka 0.9以前是保存在zookeeper中,0.9以后不再保存在zookeeper中了,kafka自己保存,可以用kafka tool工具查看。

1,消费进度

以消费者组为单位,统计消费者消费的进度,记录的是分区的偏移量。

0.9以前保存在zookeeper中,0.9以后保存在内建的topic:__consumer_offsets

Kafka 如何读取offset topic内容 (__consumer_offsets)

在这里插入图片描述

2,topic分区和消费组的关系

__consumer_offsets 中保存着消费者组、topic、topic分区和offset的信息。


推荐阅读
  • 2019年后蚂蚁集团与拼多多面试经验详述与深度剖析
    2019年后蚂蚁集团与拼多多面试经验详述与深度剖析 ... [详细]
  • 分布式开源任务调度框架 TBSchedule 深度解析与应用实践
    本文深入解析了分布式开源任务调度框架 TBSchedule 的核心原理与应用场景,并通过实际案例详细介绍了其部署与使用方法。首先,从源码下载开始,详细阐述了 TBSchedule 的安装步骤和配置要点。接着,探讨了该框架在大规模分布式环境中的性能优化策略,以及如何通过灵活的任务调度机制提升系统效率。最后,结合具体实例,展示了 TBSchedule 在实际项目中的应用效果,为开发者提供了宝贵的实践经验。 ... [详细]
  • Spring Data JdbcTemplate 入门指南
    本文将介绍如何使用 Spring JdbcTemplate 进行数据库操作,包括查询和插入数据。我们将通过一个学生表的示例来演示具体步骤。 ... [详细]
  • 本文详细介绍了如何在 Linux 系统上安装 JDK 1.8、MySQL 和 Redis,并提供了相应的环境配置和验证步骤。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 在本文中,我们将为 HelloWorld 项目添加视图组件,以确保控制器返回的视图路径能够正确映射到指定页面。这一步骤将为后续的测试和开发奠定基础。首先,我们将介绍如何配置视图解析器,以便 SpringMVC 能够识别并渲染相应的视图文件。 ... [详细]
  • 本文深入解析了Spring Cloud路由网关Zuul的核心功能及其典型应用场景。通过对方志朋老师教材的学习和实践,详细探讨了Zuul在微服务架构中的重要作用,包括请求路由、过滤器链管理以及服务动态扩展等关键特性。同时,结合实际案例,展示了Zuul在高并发和复杂业务场景下的应用优势,为读者提供了全面的技术参考。 ... [详细]
  • 【并发编程】全面解析 Java 内存模型,一篇文章带你彻底掌握
    本文深入解析了 Java 内存模型(JMM),从基础概念到高级特性进行全面讲解,帮助读者彻底掌握 JMM 的核心原理和应用技巧。通过详细分析内存可见性、原子性和有序性等问题,结合实际代码示例,使开发者能够更好地理解和优化多线程并发程序。 ... [详细]
  • 在Linux系统中,原本已安装了多个版本的Python 2,并且还安装了Anaconda,其中包含了Python 3。本文详细介绍了如何通过配置环境变量,使系统默认使用指定版本的Python,以便在不同版本之间轻松切换。此外,文章还提供了具体的实践步骤和注意事项,帮助用户高效地管理和使用不同版本的Python环境。 ... [详细]
  • 开发心得:利用 Redis 构建分布式系统的轻量级协调机制
    开发心得:利用 Redis 构建分布式系统的轻量级协调机制 ... [详细]
author-avatar
--多么哇噻的姑娘
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有