Kafka
文章平均质量分 94
架构源启
这个作者很懒,什么都没留下…
展开
-
Kafka由浅入深(6) Sender线程执行源码解析
Sender继承了Runnable接口,而Sender线程是在KafkaProducer 的构造器中进行实例化和线程启动。当KafkaProducer被创建时,也会在构造器中实例化以 “kafka-producer-network-thread |[clientId]”命名的线程,而这个线程作为守护线程,伴随着KafkaProducer整个生命周期。从下面的源码可以看出,Sender线程的run()方法中,核心发送入口方法为runOnce()。原创 2022-11-06 07:00:00 · 1838 阅读 · 1 评论 -
Kafka由浅入深(5)RecordAccumulator的工作原理
RecordAccumulator类append()的主体逻辑:1、通过当前主题获取主题消息信息(TopicInfo)2、获取分区 a、如果partition参数分区号(大于等于0),则将分区号设置为有效的分区effectivePartition; b、如果partition参数值为 RecordMetadata.UNKNOWN_PARTITION(-1),需要通过分区负载压力进行粘性分区,计算到分区号并复制给effectivePartition3、基于有效分区号原创 2022-10-29 07:00:00 · 3568 阅读 · 6 评论 -
Kafka由浅入深(4)生产者主线程工作原理(下)
KafkaProducer doSend主要执行流程分为6步: 1、 从元数据缓存(MetadataCache)非阻塞的获取当前集群信息 2、 将当前主题和当前时间到元数据中 3、 获取到当前主题的分区数 4、 Case1 如果分区号还没有分配,或者分区号在当前分区号范围之内,则 直接创建ClusterAndWaitTime 并返回当前集群元数据 5、 Case2 如果partitionsCount 为空,或者指定分区号已经有了,或者指定分区号超出当前主题分区号原创 2022-10-23 09:29:52 · 1346 阅读 · 0 评论 -
Kafka由浅入深(3)一文读懂弃用默认分区器DefaultPartitioner KIP-794
KIP-480:Sticky Partitioner引入了 UniformStickyPartitioner 并使其成为默认分区器。事实证明,尽管被称为统一粘性分区器( UniformStickyPartitioner),但粘性分区器存在问题而实际上并没有统一。原创 2022-10-17 11:29:02 · 2236 阅读 · 1 评论 -
Kafka由浅入深(2) 生产者主线程工作原理(上)
在新版的Kafka(3.3.1)客户端不建议使用默认分区器,改进了默认分区器,以在健康的代理之间分批均匀分布非键控数据,而向不健康的代理分配更少的数据。例如,具有异常行为的生产者工作负载的 p99 延迟从 11 秒减少到 154 毫秒原创 2022-10-15 11:39:22 · 1028 阅读 · 0 评论 -
Kafka由浅入深(1) Kafka的前世今生
相较于以日志为中心的系统,例如Scribe和Flume,消息队列Kafka版在具备高性能的同时,可以实现更强的数据持久化以及更短的端到端响应时间。起初Linkedin采用了ActiveMQ来进行数据交换,大约是在2010年前后,那时的ActiveMQ还远远无法满足Linkedin对数据传递系统的要求,经常由于各种缺陷而导致消息阻塞或者服务无法正常访问,为了能够解决这个问题,Linkedin决定研发自己的消息传递系统,当时linkedin的首席架构师Jay Kreps 便开始组织团队进行消息传递系统的研发。原创 2022-10-08 19:16:22 · 1087 阅读 · 0 评论