![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
【分布式-消息队列Kafka】
文章平均质量分 94
【分布式-消息队列Kafka】
我一直在流浪
这个作者很懒,什么都没留下…
展开
-
分布式 - 消息队列Kafka:Kafka 消费者消费位移的提交方式
到目前为止,我们知道消息的拉取是根据poll()方法中的逻辑来处理的,这个poll()方法中的逻辑对于普通的开发人员而言是一个黑盒,无法精确地掌控其消费的起始位置。与消费者中的其他处理过程一样,自动提交也是在轮询循环中进行的。假设刚刚提交完一次消费位移,然后拉取一批消息进行消费,在下一次自动提交消费位移之前,消费者崩溃了,那么又得从上一次位移提交的地方重新开始消费,这样便发生了重复消费的现象(对于再均衡的情况同样适用,再均衡完成之后,接管分区的消费者将从最后一次提交的偏移量的位置开始读取消息)。原创 2023-08-18 11:42:11 · 2220 阅读 · 0 评论 -
分布式 - 消息队列Kafka:Kafka 消费者的消费位移
再考虑一种情况,当有新的消费者加入时,那么必然会有再均衡的动作,对于同一分区而言,它可能在再均衡动作之后分配给新的消费者,如果不持久化保存消费位移,那么这个新的消费者也无法知晓之前的消费位移。如下图,x 表示某一次拉取操作中此分区消息的最大偏移量,假设当前消费者已经消费了 x 位置的消息,那么我们就可以说消费者的消费位移为 x,不过当前消费者需要提交的消费位移并不是 x,而是 x+1,它表示下一条需要拉取的消息的位置。消费位移(偏移量)是指消费者在消费分区中的消息时,记录的已经消费的消息的位移。原创 2023-08-16 22:06:32 · 1544 阅读 · 0 评论 -
分布式 - 消息队列Kafka:Kafka 消费者消息消费与参数配置
01. 创建消费者在读取消息之前,需要先创建一个KafkaConsumer对象。创建KafkaConsumer对象与创建KafkaProducer对象非常相似——把想要传给消费者的属性放在Properties对象里。为简单起见,这里只提供4个必要的属性:bootstrap.servers、key.deserializer 和 value.deserializer。① bootstrap.servers 指定了连接Kafka集群的字符串。② key.deserializer 和 value.deser原创 2023-08-14 15:24:04 · 3789 阅读 · 0 评论 -
分布式 - 消息队列Kafka:Kafka消费者分区再均衡(Rebalance)
我们试想以下场景:提交位移之后的 3 秒发生了 Rebalance ,在 Rebalance 之后,所有 Consumer 从上一次提交的位移处继续消费,但该位移已经是 3 秒前的位移数据了,故在 Rebalance 发生前 3 秒消费的所有数据都要重新再消费一次。在协作再均衡中,消费者群组首领会通知所有消费者,它们将失去部分分区的所有权,然后消费者会停止读取这些分区,并放弃对它们的所有权。当一个消费者被关闭或发生崩溃时,它将离开群组,原本由它读取的分区将由群组里的其他消费者读取。原创 2023-08-12 22:52:20 · 2350 阅读 · 0 评论 -
分布式 - 消息队列Kafka:Kafka消费者的分区分配策略
RangeAssignor 分配策略的原理是按照消费者总数和分区总数进行整除运算来获得一个跨度,然后将分区按照跨度进行平均分配,以保证分区尽可能均匀地分配给消费者组内所有的消费者。针对每一个主题而言,RangeAssignor策略会将订阅这个主题的消费组内的所有消费者按照名称的字典序排序,然后为每个消费者划分固定的分区范围,如果不够平均分配,那么字典序靠前的消费者会被多分配一个分区。① 消费者组1订阅了主题A,则对主题A内的分区按照序号进行排序,对消费者组1内的消费者按照名称的字典序进行排序。原创 2023-08-12 16:29:01 · 1005 阅读 · 0 评论 -
分布式 - 消息队列Kafka:Kafka消费者和消费者组
在Kafka中,一个消费者组中的每个消费者会消费主题下不同分区的消息,而不同消费者组中的消费者则可以同时消费相同分区的数据。在这些情况下,单个消费者无法跟上数据生成的速度,因此可以增加更多的消费者来分担负载,让每个消费者只处理部分分区的消息,这是横向扩展消费者的主要方式。消费者组是一个逻辑上的概念,它将旗下的消费者归为一类,每一个消费者只属于一个消费者组。消费者组的作用是实现负载均衡和容错性,因为每个消费者只能读取主题中的一部分消息,而消费者组中的所有消费者共同读取整个主题中的所有消息。原创 2023-08-12 13:50:49 · 1837 阅读 · 0 评论 -
分布式 - 消息队列Kafka:Kafka生产者发送消息的分区策略
只要你自己的实现类定义好了 partition 方法,同时设置partitioner.class 参数为你自己实现类的 Full Qualified Name,那么生产者程序就会按照你的代码逻辑对消息进行分区。@Override// 获取该 topic 可用的所有分区信息// 如果 keyBytes 为 null,表示该消息没有 key,此时采用 round-robin 的方式将消息均匀地分配到不同的分区中。原创 2023-08-11 11:26:27 · 1535 阅读 · 0 评论 -
分布式 - 消息队列Kafka:Kafka生产者架构和配置参数
如果生产者发送消息的速度超过发送到服务器的速度,则会导致生产者空间不足,这个时候KafkaProducer的send()方法调用要么被阻塞,要么抛出异常,这个取决于参数max.block.ms的配置,此参数的默认值为60000,即60秒。在默认情况下,生产者发送的消息是未经压缩的。如果应用程序调用send()方法的速度超过生产者将消息发送给服务器的速度,那么生产者的缓冲空间可能会被耗尽,后续的send()方法调用会等待内存空间被释放,如果在max.block.ms之后还没有可用空间,就抛出异常。原创 2023-08-10 22:44:27 · 2320 阅读 · 0 评论 -
分布式 - 消息队列Kafka:Kafka生产者发送消息的方式
具体来说,当生产者成功发送消息时,回调函数会被传递一个RecordMetadata对象,该对象包含了发送消息的相关信息,如消息所在的分区、消息在分区中的偏移量等。回调函数会在 producer 收到 ack 时调用,该方法有两个参数,分别是元数据信息(RecordMetadata)和异常信息(Exception),如果 Exception 为 null,说明消息发送成功,如果 Exception 不为 null,说明消息发送失败。发送即忘记,生产者发送消息后不会等待服务器的响应,直接发送下一条消息。原创 2023-08-09 15:29:59 · 2768 阅读 · 0 评论 -
分布式 - 消息队列Kafka:Kafka分区常见问题总结
如果某个 Broker 上的领导者分区数量超过了平均值的 10%,则该 Broker 将不再接受新的领导者分区,直到其他 Broker 上的领导者分区数量增加,使得整个集群的领导者分区数量平衡。比如很多公司使用 Kafka 收集应用服务器的日志数据,这种数据都是很多的,特别是对于那种大批量机器组成的集群环境,每分钟产生的日志量都能以 GB 数,因此如何将这么大的数据量均匀地分配到 Kafka 的各个 Broker 上,就成为一个非常重要的问题。并且,我们还可以通过添加新的节点机器来增加整体系统的吞吐量。原创 2023-07-21 16:51:13 · 1611 阅读 · 0 评论 -
分布式 - 消息队列Kafka:Kafka 副本|AR|ISR|OSR|Leader|Follower|HW|LEO
Kafka 为分区引入了多副本(Replica)机制,通过增加副本数量可以提升容灾能力。同一分区的不同副本中保存的是相同的消息,每个分区都有一个 leader 副本和多个 follower 副本,其中leader副本负责处理读写请求,follower副本只负责与leader副本的消息同步。副本处于不同的broker中,当leader副本出现故障时,Kafka 会自动从 follower 副本中选举一个新的 leader 副本对外提供服务。这个过程称为副本重分配。在副本重分配期间,Kafka 仍然可以正常工作原创 2023-06-26 20:22:52 · 1422 阅读 · 0 评论 -
分布式 - 消息队列Kafka:Kafka broker常见问题总结
Kafka Broker 是 Kafka 集群中的一个节点,负责接收来自生产者的消息并将其存储在 Kafka 集群中的一个或多个主题中。它还负责从 Kafka 集群中的一个或多个主题中检索消息并将其发送给消费者。原创 2023-06-26 17:46:29 · 1933 阅读 · 0 评论 -
分布式 - 消息队列Kafka:Kafka中Zookeeper的作用是什么?
② Topic和Partition的管理:Kafka的topic和partition信息存储在Zookeeper的节点上,Kafka通过与Zookeeper进行交互来创建、删除、修改topic和partition的信息。总之,Kafka和Zookeeper之间的配合工作是非常紧密的,Zookeeper在Kafka集群中扮演着非常重要的角色,它负责存储和管理集群的元数据信息,以及协调Kafka集群中各个节点之间的通信。需要注意的是,Kafka的元数据存储在Zookeeper中是为了支持集群的动态扩容和缩容。原创 2023-05-31 17:45:48 · 1419 阅读 · 1 评论 -
分布式 - 消息队列Kafka:Kafka 命令行操作常见问题总结
① 创建主题:② 查看主题详细描述:③ 修改主题:修改分区数,分区数只能增加不能减少④ 再次查看 test 主题的详情:⑤ 查看当前服务器中的所有 topic:⑥ 删除主题:02. kafka 生产者命令行操作03. kafka 消费者命令行操作04. Kafka 命令行工具有哪些常用的命令?Kafka 命令行工具包括 kafka-topics.sh、kafka-console-producer.sh、kafka-console-consumer.sh、kafka-configs.s原创 2023-05-26 16:25:09 · 877 阅读 · 0 评论 -
分布式 - 消息队列Kafka:Kafka术语常见问题总结
Kafka是一个分布式流处理平台,最初由LinkedIn开发。它是一个高吞吐量、低延迟的消息队列系统,可以处理大量的实时数据流。Kafka的设计目标是为了处理实时数据流,包括日志、指标、事件和其他实时数据。它的架构基于发布/订阅模式,其中生产者将消息发布到主题(topic)中,而消费者则从主题中订阅消息。Kafka的主要特点包括高吞吐量、可扩展性、持久性、容错性和可靠性。Kafka 属于分布式的消息引擎系统,它的主要功能是提供一套完备的消息发布与订阅解决方案。原创 2023-05-25 17:38:51 · 865 阅读 · 0 评论