Kafka
文章平均质量分 80
wanger61
这个作者很懒,什么都没留下…
展开
-
保证Kafka消息有序性
(3)既没有 partition 值又没有 key 值的情况下,第一次调用时随机生成一个整数(后面每次调用在这个整数上自增),将这个值与 topic 可用的 partition 总数取余得到 partition值,也就是常说的 round-robin 算法。,并且设置参数max.in.flight.requests.per.connection=1,也即同一个链接只能发送一条消息,如此便可严格保证Kafka消息的顺序。可以在消费者中,消息分发至不同的线程时,加一个队列,消费者去做hash分发,将。原创 2024-01-17 16:10:04 · 807 阅读 · 1 评论 -
Kafka过期时间TTL、延时队列、死信队列实现方案
这里提供一种实现方案:将消息的 TTL 的设定值以键值对的形式保存在消息的 header 字段中,在消费者端配置拦截器,消费者在消费消息时判断此条消息是否超时。解决方式,提前记录这一批消息的最大偏移量,或在过滤之后的消息集中的头部或尾部设置一个状态消息,专门用来存放这一批消息的最大偏移量。Kafka 和 RabbitMQ 不同,Kafka的消息并没有TTL这一概念,因此想要实现消息的过期功能,需要作额外的处理。需要注意 RecordHeader 的值是 byte[]类型,因此需要进行转换。原创 2022-10-18 10:14:19 · 2462 阅读 · 0 评论 -
Kafka高可用性原理
leader epoch 代表 leader 的纪元信息,初始值为0,每当 leader 变更一次, leader epoch 的值就会加1,相当于为 leader 增设了一个版本号。数据在主从复制的过程中难免会遇到某一节点宕机的情况,如何确保在类似特殊情况下依旧保持各副本数据的一致性,是分布式系统必须要解决的问题。前面提到了,Kafka采用了主写主读的方式,副本仅仅提供了数据容错功能,为什么 Kafka 不采用读写分离的方式呢。读写分离的主要作用是分摊负载,而 Kafka 本身就能很好的做到负载均衡,原创 2022-10-09 16:09:41 · 1450 阅读 · 0 评论 -
Kafka事务消息详解
如果消费者先处理消息后提交位移,那么如果在消息处理之后在位移提交之前消费者宕机了,那么重新上线后,会从上一次位移提交的位置拉取,这就导致了重复消息,对应 at least once。反过来,如果先提交位移后处理消息,就有可能会造成消息的丢失,对应 at most once。设置为 true即可(默认为false),开启后生产者就会幂等的发送消息。Kafka提供了幂等机制,只需显式地将生产者客户端参数。注意:序列号实现幂等只是针对每一对,即。Kafka消费者消息保障主要。原创 2022-10-08 11:39:48 · 4548 阅读 · 0 评论 -
时间轮算法
且通过 DelayQueue推进时间又显著减少了时间的“空推进”,减少无故空耗机器的性能资源,通过以少量空间换时间做到“时间轮按照上述的方式运转,但是可以看到该时间轮的时间范围(interval)是有限的(tickMs*wheelSize),如果任务的延时超过了该时间范围(interval),如此时要插入一个延时为350ms的任务,则涉及到了。,而每一层时间轮的 wheelSize 是固定的,都是20,因此第二层时间轮的时间跨度为 400ms,以此类推,第三层时间轮的时间跨度为8000ms。原创 2022-09-30 15:32:18 · 1511 阅读 · 0 评论 -
Kafka消费者的线程安全问题和多线程实现
那么就会有越来越多的消息得不到及时的消费造成延迟。因此,可以采用多线程的方式来提高消费者的整体消费能力。使用该方式实现,一般所有的消费线程都属于同一个消费者组,一个消费线程可以消费一个或多个分区中的消息,因此。KafkaConsumer 非线程安全不意味着在消费消息的时候只能以单线程的方式执行,如果。的方式来获取当前 KafkaConsumer 的使用权,如果获取不到则抛异常。此外,如果需要手动提交,该种方式的实现也更加困难,有可能会有数据丢失的风险。与线程安全的 KafkaProducer 不同,原创 2022-09-30 10:18:48 · 2489 阅读 · 1 评论 -
Kafka调优策略
例如:producer 吞吐量 = 20m/s;consumer 吞吐量 = 50m/s,期望吞吐量 100m/s;• ISR 里应答的最小副本数量大于等于 2(min.insync.replicas = 2)参考文献:https://zhuanlan.zhihu.com/p/371361083。• 幂等性(enable.idempotence = true) + 事务。• 区副本大于等于 2 (–replication-factor 2)分区数 = 100 / 20 = 5 分区。原创 2022-08-22 10:25:35 · 1905 阅读 · 0 评论 -
【Kafka源码分析】三、消费者Consumer
选择策略是 根据groupId的hashcode值与offsets的分区数量求模 (如XXX主题的默认分区数是50,groupid的hashcode值 = 1,1% 50 = 1,那么XXX主题的1号分区,在哪个broker上,就选择这个节点的coordinator作为协调者)的放置分区到消费者上面,例如说7个分区,交给3个消费者进行消费,他的分配策略也是3,2,2的格式,和range类似,但不同的是黏性分区中的3不一定是第一个,而是随机的,尽可能的均衡。1 号消费者:消费到 2、5、3 号分区数据。原创 2022-08-22 10:17:19 · 929 阅读 · 0 评论 -
【Kafka源码分析】二、服务端Server
本文主要对Kafka Server端的原理进行分析原创 2022-07-29 15:23:17 · 605 阅读 · 0 评论 -
【Kafka源码分析】一、生产者Producer
本文旨在对Kafka的源码进行分析,第一部分主要分析Kafka生产者的工作流程原创 2022-07-28 17:24:02 · 1230 阅读 · 0 评论