zoukankan      html  css  js  c++  java
  • producer发布消息

    1、写入方式

        producer采用push模式将消息发布到broker,每条消息都被append到patition中,属于顺序写磁盘(顺序写磁盘效率比随机写内存要高,保障kafka吞吐率)

    2、消息路由

        producer发送消息到broker时,会根据分区算法选择将其存储到哪一个Partition,

        其路由机制为:

        2.1 指定了patition,则直接使用

        2.2 未指定patition但指定key,通过对key的value进行hash 选出一个patition

        2.3 patition和key都未指定,使用轮询选出一个patition

    3、写入流程

         3.1 producer先从zookeeper的''/brokers/.../state"节点找到该partition的leader

         3.2 producer将消息发送给该leader

         3.3 leader将消息写入本地log

         3.4 followers从leader pull消息,写入本地log后leader发送ack

         3.5 leader收到所有ISR中的replica的ACK后,增加HW(high watermark,最后commit的offset)并向procuder发送ACK

    4、producer delivery guaranteeproducer 发送担保

         4.1 At most once 消息可能会丢,但绝不会重复传输

         4.2 At least one 消息绝不会丢,但可能会重复传输

         4.3 Exactly once 每条消息肯定会被传输一次且仅传输一次

        当producer向broker发送消息时,一旦这条消息被commit,由于replication的存在,它就不会丢失,但是如果producer发送数据给broker后,遇到网络问题而造成通信中断,那producer就无法判断该条消息是否已经commit。虽然kafka无法确定网络故障期间发生了什么,但是producer可以生成一种类似于主键的东西,发生故障时幂等性的重试多次,这样就做到了Exactly once,但目前还并未实现,所以目前默认情况下一条消息从producer到broker是确保了at least once,可通过设置producer异步发送实现at most once。

  • 相关阅读:
    java动态代理机制
    Spring的几种注入bean的方式
    java的泛型与反射机制
    java中equals与==的比较
    Java虚拟机JVM简单理解
    java集合类总结
    timersmanager 解析
    rtsp实时流通过rtmp推送到服务端
    udp 视频包网络传输花屏
    GB28181国检推流
  • 原文地址:https://www.cnblogs.com/cherish010/p/9015029.html
Copyright © 2011-2022 走看看