聊聊kafka的group coordinator

本文主要来讲一个kafka的group coordinator。在kafka0.9.0版本的时候,开始启用了新的consumer config,这个新的consumer config采用bootstrap.servers替代之前版本的zookeeper.connect,主要是要渐渐弱化zk的依赖,把zk依赖隐藏到broker背后。

group coordinator

使用bootstrap.servers替代之前版本的zookeeper.connect,相关的有如下两个改动:

  • 在 Server 端增加了 GroupCoordinator 这个角色
  • 将 topic 的 offset 信息由之前存储在 zookeeper(/consumers/<group.id>/offsets/<topic>/<partitionId>,zk写操作性能不高) 上改为存储到一个特殊的 topic 中(__consumer_offsets)

从0.8.2版本开始Kafka开始支持将consumer的位移信息保存在Kafka内部的topic中(从0.9.0版本开始默认将offset存储到系统topic中) Coordinator一般指的是运行在broker上的group Coordinator,用于管理Consumer Group中各个成员,每个KafkaServer都有一个GroupCoordinator实例,管理多个消费者组,主要用于offset位移管理和Consumer Rebalance。

rebalance时机

在如下条件下,partition要在consumer中重新分配:

  • 条件1:有新的consumer加入
  • 条件2:旧的consumer挂了
  • 条件3:coordinator挂了,集群选举出新的coordinator
  • 条件4:topic的partition新加
  • 条件5:consumer调用unsubscrible(),取消topic的订阅

__consumer_offsets

Consumer通过发送OffsetCommitRequest请求到指定broker(偏移量管理者)提交偏移量。这个请求中包含一系列分区以及在这些分区中的消费位置(偏移量)。偏移量管理者会追加键值(key-value)形式的消息到一个指定的topic(__consumer_offsets)。key是由consumerGroup-topic-partition组成的,而value是偏移量。

内存中也会维护一份最近的记录,为了在指定key的情况下能快速的给出OffsetFetchRequests而不用扫描全部偏移量topic日志。如果偏移量管理者因某种原因失败,新的broker将会成为偏移量管理者并且通过扫描偏移量topic来重新生成偏移量缓存。

清除offset日志

配置

log.cleaner.enable=true

compact

doc

  • kafka-0.9-consumerconfigs
  • Kafka-users About bootstrap.servers
  • Kafka Detailed Consumer Coordinator Design
  • Kafka Client-side Assignment Proposal
  • Kafka源码分析 Consumer(3) offset
  • Kafka 之 Group 状态变化分析及 Rebalance 过程
  • kafka系列之(3)——Coordinator与offset管理和Consumer Rebalance
  • Kafka 如何读取offset topic内容 (__consumer_offsets)
  • Committing and fetching consumer offsets in Kafka
  • Kafka源码深度解析-序列7 -Consumer -coordinator协议与heartbeat实现原理
  • Kafka集群磁盘使用率瞬超85%,幕后元凶竟是它?
  • kafka 0.9.0.0 __consumer_offsets日志清理问题?
  • FusionInsight C60U10SPC002 Kafka磁盘容量不足告警
  • 剖析Linkedln遭遇的Kafka“危机故障”
  • Kafka 0.8.2 新的offset管理
  • Consumer offset management in Kafka

原文发布于微信公众号 - 码匠的流水账(geek_luandun)

原文发表时间:2017-10-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android群英传

从 Linux 进程调度到 Android 线程管理

2732
来自专栏Seebug漏洞平台

CVE-2017-16943 Exim UAF漏洞分析--后续

作者:Hcamael@知道创宇404实验室 上一篇分析出来后,经过@orange的提点,得知了meh公布的PoC是需要特殊配置才能触发,所以我上一篇分析文章最后...

3226
来自专栏匠心独运的博客

消息中间件—RocketMQ消息存储(二)一、RocketMQ存储整体设计架构回顾二、RocketMQ存储关键技术—再谈Mmap与PageCache三、RocketMQ存储优化技术四、RocketMQ

文章摘要:上篇中主要介绍了RocketMQ存储部分的整体架构设计,本篇将深入分析RocketMQ存储部分的细节内容 在本篇文章中,小编将继续深入分析与介绍Ro...

1K3
来自专栏jojo的技术小屋

原 web安全、XSS、CSRF、注入攻击

作者:汪娇娇 时间:2017年8月15日 当时也是看了一本书《白帽子讲web安全》,简单的摘录然后做了个技术分享,文章不是很详细,建议大家结合着这本书看哈。 w...

4817
来自专栏分布式系统和大数据处理

C#网络编程(基本概念和操作) - Part.1

C#网络编程系列文章计划简单地讲述网络编程方面的基础知识,由于本人在这方面功力有限,所以只能提供一些初步的入门知识,希望能对刚开始学习的朋友提供一些帮助。如果想...

1133
来自专栏张善友的专栏

SmartGit:Git版本控制系统的图形化客户端程序

Git最初是一个由林纳斯·托瓦兹为了更好地管理linux内核开发而创立的分布式版本控制/软件配置管理软件。后来Git内核已经成熟到可以独立地用作版本控制。很多有...

2065
来自专栏进击的程序猿

raft 系列解读(3) 之 代码实现最小规则followercandidateleader规则RequestVote RPCAppendEntries RPC

首先,其实raft如果你不去看理论正确性的证明,光实现的话,只要按照raft里面给出的原则写代码就ok!如果代码写出来不正确,只能是你自己实现的问题。囧

952
来自专栏Spark学习技巧

Kafka源码系列之以kafka为例讲解分布式存储系统

Kafka源码系列,浪尖是以kafka 0.8.2.2为例给大家讲解。由于公众号阅读不适大量文字,所以浪尖会尽量精简文字。目标是大家读完kafka源码系列能彻底...

3305
来自专栏JAVA烂猪皮

轻松搞定RocketMQ入门

(1)NameServer是一个几乎无状态的节点,可集群部署,节点之间无任何信息同步

1031
来自专栏jojo的技术小屋

原 web安全、XSS、CSRF、注入攻击

2743

扫码关注云+社区

领取腾讯云代金券