新版本的kafka会把每个主题消费进度保存在kafka所在机器的__consumer_offsets主题下面,该主题默认副本数为1,当一台机器down掉后,该机器保存的主题消费进度就会丢失,为了保证kafka...的高可用,我们必须保证__consumer_offsets的副本数大于1,比如3台kafka集群时可以设置副本数为2,这样当其中一台kafka服务down掉后,仍能保证kafka集群的高可用性,为了实现这个目的...depends_on: - zk1 - zk2 - zk3 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR这个参数就是用来配置__consumer_offsets...副本数的。
主题topickafka以topic构建消息队列创建主题需要明确确定:分区数和副本数,zookeeper(旧版)分区数,确定拆分成多少个队列,增加吞吐副本数,确定队列的可靠性zookeeper存储基本的信息...,比如客户端配置分区和副本的数量,需要根据业务的吞吐量和稳定性要求进行评估kafka支持修改topic,支持增加分区,不支持减少分区,这个时候消息队列消息的顺序会受影响,修改时需要三思,另外一个思路是新建一个...topic,双写,进行数据切换常用的工具自带的shell工具kafka-admin分区分区可以通过参数,实现优先副本。...分区平衡,代表的是当前topic数据的平衡。但是不代表每个节点都是如此。...,就需要运行脚本进行再迁移了如何选择合适的分区呢?
介绍 今天分享一下kafka的主题(topic),分区(partition)和副本(replication),主题是Kafka中很重要的部分,消息的生产和消费都要以主题为基础,一个主题可以对应多个分区,...主题,分区实际上只是逻辑概念,真正消息存储的地方是副本的日志文件上,所以主题分区的作用是在逻辑上更加规范的管理日志文件。...主题,分区,副本关系如图所示: 创建主题分区 可以使用kafka-topics.sh创建topic,也可以使用Kafka AdminClient创建,当我们往Kafka发送消息的时候,如果指定的topic...不存在,那么就会创建一个分区数为1的topic,不过这样做并不合适,我们应该规划好主题的分区,副本,然后在创建topic,这样对管理topic更加好。...创建了主题分区后,会在配置我们配置的日志目录(log.dirs)下生成对应的分区副本文件夹。
即取group名的正hashCode模groupMetadataTopicPartitionCount(即__consumer_offsets对应的分区数)。...,其partitionFor后的值均为43,我们初步判断分区可能与__consumer_offsets的43分区相关!...四、回到现网 1、__consumer_offsets分区信息验证 image.png image.png 43分区果然存在leader异常的情况 2、问题复现 我们使用UUID批量生成消费组名...,使其hashCode取模后为异常分区的分区号,再使用其进行消费时均出现消费异常的问题。...与网络抖动和一些集群操作可能有关,需要具体问题具体分析 如何将__consumer_offsets异常分区恢复正常?
主题 Topic主题,类似数据库中的表,将相同类型的消息存储到同一个主题中,数据库中的表是结构化的,Topic的属于半结构化的,主题可以包含多个分区,KafKa是一个分布式消息系统,分区是kafka的分布式的基础...分区 Kafka将主题拆分为多个分区,不同的分区存在不同的服务器上,这样就使kafka具有拓展性,可以通过调整分区的数量和节点的数量,来线性对Kafka进行拓展,分区是一个线性增长的不可变日志,当消息存储到分区中之后...分区可以保证kafka的集群进行线性的拓展。...副本 如果分区只存在一份的话,一旦分区损害,这份数据就会丢失,kafka通过副本机制,保证数据的可靠性,可以设置副本因子的数量,replication-factor=3,含义就是包含主分区在内三个副本,...,P0和P2分区是follower,这个broker只负责从p0 和p2的leader中同步数据,而不负责这两个分区的读写请求。
kafka存在一个特殊的主题__consumer_offsets,该主题用于保存其他主题生产数据及消费数据的进度offsets,这个主题有50个分区。...假设主题test2的数据生产进度偏移量需要保存到__consumer_offsets主题的2号分区,但是我们把broker.id=2的服务器停掉了,并且分区只有一个Leader没有备份。...),因此即使重启了集群,__consumer_offsets主题的分区副本数刚开始看的时候还是1 假如__consumer_offsets的分区包含n=3个副本,除非所有副本都坏掉,否则还是可以正常工作...---- 动态修改分区数 如果我们想动态修改某个主题的分区数,这里以__consumer_offsets主题为例,首先新建一个JSON文件,比如topic.json: { "version":...消费者在拿到消息后,会将消息位置存储到_consumer_offsets这个主题的分区下面,下次读取时,就会返回下一个消费位置。
除此之外,在热招的Java架构师岗位面试中,Kafka相关的面试题被面试官问到的几率也是非常大的,所以拥有一定年限的开发者,搞懂Kafka是很有必要的。 那么怎么才能有效且快速学习Kafka呢?...②原理分析(整体架构+元数据的更新) ③重要的生产者参数 三、消费者 ①消费者与消费组 ②客户端开发(必要的参数配置+订阅主题与分区+反序列化+消息消费+位移提交+控制或关闭消费+指定位移消费+再均衡...+消费者拦截器+多线程实现+重要的消费者参数) 四、主题与分区 ①主题的管理(创建主题+分区副本的分配+查看主题+修改主题+配置管理+主题端参数+删除主题) ②初始Kafka AdminClient...(基本使用+主题合法性验证) ③分区的管理(优先副本的选举+分区重分配+复制限流+修改副本因子) ④如何选择合适的分区数(性能测试工具+分区数越多吞吐量就越高吗+分区数的上限+参考因素) 五、日志存储...(旧版消费者客户端的问题+再均衡的原理) ③_consumer_offsets剖析 ④事务(消息传输保障+幂等+事务) 八、可靠性探究 ①副本剖析(失效副本+ISR的伸缩+LEO与HW+Leader
从而将负载分散到不同的 __consumer_offsets 分区上。...__consumer_offsets 是 kafka 自行创建的,和普通的 topic 相同,它存在的目的之一就是保存 consumer 提交的位移。...+topic+分区号,而 value 就是 offset 的值。...--group szz1-group可以看到图中 展示了每个partition 对应的消费者id; 因为只开了一个消费者; 所以是这个消费者同时消费3个partition;TOPIC:主题PARTTION...查找__consumer_offsets 分区数中的消费组偏移量offset上面的 3.
主题是一个逻辑上的概念,它还可以细分为多个分区,一个分区只属于单个主题,很多时候也会把分区称为主题分区(Topic-Partition)。...同一主题下的不同分区包含的消息是不同的,分区在存储层面可以看作一个可追加的日志(Log)文件,消息在被追加到分区日志文件的时候都会分配一个特定的偏移量(offset)。...如上图所示,主题中有4个分区,消息被顺序追加到每个分区日志文件的尾部。...如果一个主题只对应一个文件,那么这个文件所在的机器I/O将会成为这个主题的性能瓶颈,而分区解决了这个问题。...在创建主题的时候可以通过指定的参数来设置分区的个数,当然也可以在主题创建完成之后去修改分区的数量,通过增加分区的数量可以实现水平扩展。
kafkaConsumer.subscribe(Arrays.asList("test1","test2","...")); 2、订阅分区消费者还可以直接订阅某些主题的特定分区,在KafkaConsumer...分别代表分区所属的主题和自身的分区编号,这个类可以和我们通常所说的主题-分区的概念映射起来。...比如需要订阅 test 主题分区编号为 0 的分区,示例如下: kafkaConsumer.assign(Arrays.asList(new TopicPartition("test", 0))); Kafka...提供了一个计算主题分区的方法:partitionsFor() ,该方法可以查询指定主题的元数据信息。...,此类的主要结构如下:现在,通过 partitionFor() 方法的协助,我们可以通过 assign() 方法来实现订阅主题(全部分区)的功能,示例代码参考如下: 3、如何取消订阅 既然有订阅,那么就有取消订阅
= 1,那么__consumer_offsets 主题的1号分区,在哪个broker上,就选择这个节点的coordinator 作为这个消费者组的老大。...offsets.topic.num.partitions __consumer_offsets 的分区数,默认是 50 个分区。...(3)重新发送到一个全新的主题中,由于默认创建的主题分区数为 1,可以看到只能有一个消费者消费到数据 4 分区的分配以及再平衡 1、一个consumer group中有多个consumer组成,一个 topic...5. offset 位移 5.1 offset 的默认维护位置 __consumer_offsets 主题里面采用 key 和 value 的方式存储数据。...(5)查看消费者消费主题__consumer_offsets。
在__consumer_offsets主题里面采用key+value的方式存储数据。 key是groupId+topic+分区号 value是当前offset的值。...启动生产者向主题testArtisan 中生产数据 启动消费者消费主题testArtisan 中的数据 注意:指定消费者组的名称,能够更好的观察数据存储位置(key—>groupId+toipc...启动消费者消费主题__consumer_offsets [root@localhost bin]# ....这意味着消费者不需要手动追踪每个分区的offset,Kafka会代替其执行这项任务。...Offset是一个标识,用来追踪消费者在每个分区中的读取位置。
KafkaConsumer KafkaConsumer consumer = new KafkaConsumer(props); // 订阅要查询的主题...topicPartitions.add(new TopicPartition(partition.topic(), partition.partition())); } // 手动分配分区...consumer.assign(topicPartitions); // 记录未消费消息总数 int totalBacklog = 0; // 遍历每个分区获取其未消费消息数并累加...(String topic : topicMap.keySet()) { // 订阅要查询的主题 List partitions...---- 有2个方法,第二个方法 Map getAllTopicsBacklog() 虽然会返回所有的Topic 的积压量,但只有 对应的 消费组的数据是准确的。
在《Kafka消费者的使用和原理》中已经提到过“再均衡”的概念,我们先回顾下,一个主题可以有多个分区,而订阅该主题的消费组中可以有多个消费者。...反观这个功能的收益点却是很低,如果真的需要实现此类的功能,完全可以重新创建一个分区数较小的主题,然后将现有主题中的消息按照既定的逻辑复制过去即可。...当消费者订阅主题时使用的是正则表达式,例如“test.*”,表示订阅所有以test开头的主题,当有新的以test开头的主题被创建时,则需要通过再均衡将该主题的分区分配给消费者。...的哈希值,取余offsetsTopicPartitionCount(内部主题__consumer_offsets的分区数,默认50)的绝对值,其意思就是把消费组哈希散列到内部主题__consumer_offsets...协调者不仅是负责组成员管理和再均衡,在协调者中还需要负责处理消费者的偏移量提交,而偏移量提交则正是提交到__consumer_offsets的一个分区上。
GC发生频率,时长,活跃对象大小 应用线程数 集群监控 查看Broker进程是否启动,端口号是否建立 查看Broker端关键日志 server.log 是Broker端日志 controller.log主题分区...state-change.log 主题分区状态变更日志 查看Broker端关键线程的运行状态 kafka-log-cleaner-thread是Log Compaction 线程 ReplicaFetcherThread...可能原因 副本所在的 Broker 宕机了; 待删除主题的部分分区,依然在执行迁移过程 解决方式 1.删除Zookeeper节点, /admin/delete_topics 删除主题对应的znode...2.手动删除改主题在磁盘上的分区目录 3.谨慎执行,Zookeper中执行 rmr /controller 触发controller重新选举,刷新Controller缓存 __consumer_offsets...占用的磁盘过多 可能原因 Kafka-log-cleaner-thread 前缀的线程挂掉了 解决办法 只能重启相应的 Broker 特殊主题 __consumer_offsets __transaction_state
如上图所示,Consumer 使用 Consumer Group 名称标记自己,并且发布到主题的每条记录都会传递到每个订阅消费者组中的一个 Consumer 实例。...Group Coordinator 的作用是用来存储 Group 的相关 Meta 信息,并将对应 Partition 的 Offset 信息记录到 Kafka 内置Topic(__consumer_offsets...每个 Group 都会选择一个 Coordinator 来完成自己组内各 Partition 的 Offset 信息,选择的规则如下: 计算 Group 对应在 __consumer_offsets 上的...例如有新的 consumer 实例加入该消费组或者离开组。 订阅的 Topic 个数发生变化。 订阅 Topic 的分区数发生变化。...leader 进行分区的分配 Issues Known Issue #1: Stop-the-world Rebalance ?
是Broker端日志 controller.log主题分区 state-change.log 主题分区状态变更日志 查看Broker端关键线程的运行状态 kafka-log-cleaner-thread...records-lead-min 消费者最小消费消息的位移与分区当前第一条消息位移的差值。...可能原因 副本所在的 Broker 宕机了; 待删除主题的部分分区,依然在执行迁移过程 解决方式 1.删除Zookeeper节点, /admin/delete_topics 删除主题对应的znode...2.手动删除改主题在磁盘上的分区目录 3.谨慎执行,Zookeper中执行 rmr /controller 触发controller重新选举,刷新Controller缓存 __consumer_offsets...占用的磁盘过多 可能原因 Kafka-log-cleaner-thread 前缀的线程挂掉了 解决办法 只能重启相应的 Broker 特殊主题 __consumer_offsets __transaction_state
无论是自动提交还是手动提交,offset 的实际存储位置都是在 Kafka 的一个内置主题中:__consumer_offsets。...Kafka broker 会根据消费组 ID 和主题名来计算出一个哈希值,并将其映射到 __consumer_offsets 主题的某个分区上。...__consumer_offsets 主题是 Kafka 0.9.0 版本引入的新特性,之前的版本是将 offset 存储在 Zookeeper 中。...Kafka 只保证分区内的顺序性,即同一个分区内的消息按照 offset 的顺序进行发送和接收。但是不保证主题内或跨主题的顺序性,即不同分区内的消息可能会乱序发送和接收。...因此,如果需要保证主题内或跨主题的顺序性,需要在生产者和消费者端进行额外的处理,例如使用同一个分区键或同一个消费组。
主题和分区是Kafka的两个核心概念,主题作为消息的归类,可以再细分为一个或者多个分区,分区可以看作是对消息的二次归类。...从底层上来说,主题和分区都是逻辑上的概念。分区可以有一个或多个副本,每个副本对应一个日志文件,每个日志文件对应一个或多个日志段文件。...主题、分区、副本、日志关系: 主题的管理 创建主题 bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic topicone -...Kafka可以将主题划分为多个分区(Partition),会根据分区规则选择把消息存储到哪个分区中,只要 如果分区规则设置的合理,那么所有的消息将会被均匀的分布到不同的分区中,这样就实现了负载均衡 和水平扩展...创建集群和主题 首先创建一个有三个节点的集群。创建主题 (topic-cluster) 3个分区 , 副本数为 3。 主题的副本数。
消费者组初始化流程 (1)coordinator:辅助实现消费者组的初始化和分区的分配 coordinator节点选择=groupid的hashcode值%50(_consumer_offsets的分区数量...) 例如:groupid的hashcode值=1,1%50=1,那么_consumer_offsets主题的1号分区,在哪个broker上,就选择这个节点的coordinator作为这个消费者组的老大。...offsets.topic.num.partitions #__consumer_offsets 的分区数,默认是 50 个分区。...,由于默认创建的主题分区数为 1,可以看到只能有一个消费者消费到数据。...offset 位移 offset的默认维护位置 _consumer_offsets主题里面采用key和value的方式储存数据。
领取专属 10元无门槛券
手把手带您无忧上云