大数据开发:Kafka producer设计原理
2021/6/3 18:28:05
本文主要是介绍大数据开发:Kafka producer设计原理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
关于Kafka这个组件,作为大数据技术生态当中流行的消息组件,得到越来越多的市场认可,kafka与大数据技术生态的诸多组件,也能实现很好地集成,地位也越来越稳固。今天的大数据开发学习分享,我们就主要来讲讲Kafka producer设计原理。
1.序列化消息&计算partition
根据key和value的配置对消息进行序列化,然后计算partition:
ProducerRecord对象中如果指定了partition,就使用这个partition。否则根据key和topic的partition数目取余,如果key也没有的话就随机生成一个counter,使用这个counter来和partition数目取余。这个counter每次使用的时候递增。
2.发送到batch&&唤醒Sender线程
根据topic-partition获取对应的batchs(Dueue<ProducerBatch>),然后将消息append到batch中.如果有batch满了则唤醒Sender线程。队列的操作是加锁执行,所以batch内消息时有序的。后续的Sender操作当前方法异步操作。
3.Sender把消息有序发到broker(tp replia leader)
①确定tp relica leader所在的broker
Kafka中每台broker都保存了kafka集群的metadata信息,metadata信息里包括了每个topic的所有partition的信息:leader,leader_epoch,controller_epoch,isr,replicas等;Kafka客户端从任一broker都可以获取到需要的metadata信息;sender线程通过metadata信息可以知道tp leader的brokerId。
producer也保存了metada信息,同时根据metadata更新策略(定期更新metadata.max.age.ms、失效检测,强制更新:检查到metadata失效以后,调用metadata.requestUpdate()强制更新。
②幂等性发送
为实现Producer的幂等性,Kafka引入了Producer ID(即PID)和Sequence Number。对于每个PID,该Producer发送消息的每个<Topic,Partition>都对应一个单调递增的Sequence Number。同样,Broker端也会为每个<PID,Topic,Partition>维护一个序号,并且每Commit一条消息时将其对应序号递增。对于接收的每条消息,如果其序号比Broker维护的序号)大一,则Broker会接受它,否则将其丢弃。
如果消息序号比Broker维护的序号差值比一大,说明中间有数据尚未写入,即乱序,此时Broker拒绝该消息,Producer抛出InvalidSequenceNumber。
如果消息序号小于等于Broker维护的序号,说明该消息已被保存,即为重复消息,Broker直接丢弃该消息,Producer抛出DuplicateSequenceNumber。
Sender发送失败后会重试,这样可以保证每个消息都被发送到broker。
4.Sender处理broker发来的produce response
一旦broker处理完Sender的produce请求,就会发送produce response给Sender,此时producer将执行我们为send()设置的回调函数。至此producer的send执行完毕。
关于大数据开发学习,Kafka producer设计原理,以上就为大家做了简单的介绍了。在大数据框架当中,Kafka作为消息组件,在企业级开发当中应用越来越普遍,学习阶段也应当多投入精力去钻研。
这篇关于大数据开发:Kafka producer设计原理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-29Elasticsearch慢查询日志配置
- 2024-05-29揭秘华为如此多成功项目的产品关键——Charter模板
- 2024-05-29海外IDC业务拓展的7大挑战
- 2024-05-29InLine Chat功能优化对标Github Copilot,CodeGeeX带来更高效、更直观的编程体验!
- 2024-05-29CodeGeeX 智能编程助手 6 项功能升级,在Visual Studio插件市场霸榜2周!
- 2024-05-29AutoMQ 生态集成 Apache Doris
- 2024-05-292024年IDC行业的深度挖掘:机遇、挑战与未来展望
- 2024-05-29五款扩展组件齐发 —— Volcano、Keda、Crane-scheduler 等,邀你体验
- 2024-05-29AutoMQ 对象存储数据高效组织的秘密: Compaction
- 2024-05-29活动预告|来 GIAC 大会听大数据降本利器:AutoMQ 基于云原生重新设计的 Kafka