• kafka负载均衡相关资料收集(三)


     

    apache kafka系列之Producer处理逻辑

    下文是转载的,原文链接地址:点这儿
    【转】 Kafka ProducerKafka Producer处理逻辑kafka生产者处理逻辑apache kafka系列

    apache kafka中国社区QQ群:162272557

    转载自同事(董重)写得一篇wiki博客

    Kafka Producer处理逻辑

    Kafka Producer产生数据发送给Kafka Server,具体的分发逻辑及负载均衡逻辑,全部由producer维护。

    Kafka结构图

    Kafka Producer默认调用逻辑

    默认Partition逻辑

    1、没有key时的分发逻辑

    每隔 topic.metadata.refresh.interval.ms 的时间,随机选择一个partition。这个时间窗口内的所有记录发送到这个partition。

    发送数据出错后也会重新选择一个partition

    2、根据key分发

    对key求hash,然后对partition数量求模

    Utils.abs(key.hashCode) % numPartitions

    如何获取Partition的leader信息(元数据)

    决定好发送到哪个Partition后,需要明确该Partition的leader是哪台broker才能决定发送到哪里。

    具体实现位置

    kafka.client.ClientUtils#fetchTopicMetadata

     实现方案

    1、从broker获取Partition的元数据。由于Kafka所有broker存有所有的元数据,所以任何一个broker都可以返回所有的元数据

    2、broker选取策略:将broker列表随机排序,从首个broker开始访问,如果出错,访问下一个

    3、出错处理:出错后向下一个broker请求元数据

    注意

    • Producer是从broker获取元数据的,并不关心zookeeper。
    • broker发生变化后,producer获取元数据的功能不能动态变化。
    • 获取元数据时使用的broker列表由producer的配置中的 metadata.broker.list 决定。该列表中的机器只要有一台正常服务,producer就能获取元数据。
    • 获取元数据后,producer可以写数据到非 metadata.broker.list 列表中的broker

    错误处理

    producer的send函数默认没有返回值。出错处理有EventHandler实现。

    DefaultEventHandler的错误处理如下:

    • 获取出错的数据
    • 等待一个间隔时间,由配置 retry.backoff.ms 决定这段时间长短
    • 重新获取元数据
    • 重新发送数据

    出错重试次数由配置 message.send.max.retries 决定

    所有重试全部失败时,DefaultEventHandler会抛出异常。代码如下

    if(outstandingProduceRequests.size >0) {

      producerStats.failedSendRate.mark()

      val correlationIdEnd = correlationId.get()

      error("Failed to send requests for topics %s with correlation ids in [%d,%d]"

        .format(outstandingProduceRequests.map(_.topic).toSet.mkString(","),

        correlationIdStart, correlationIdEnd-1))

      thrownewFailedToSendMessageException("Failed to send messages after "+ config.messageSendMaxRetries +" tries.", null)

    }


    请注明转载自:http://write.blog.csdn.NET/postedit/26687109

  • 相关阅读:
    套接字编程
    #define 的换行问题
    影响网站打开速度的10个因素
    C#字符串内多个空格合并成1个
    cssaucl论坛 购买域名和网络空间ftp上传
    MVC教程 索引
    DataTable和xls文件的相互转换;关闭服务端的Excel进程;用静态类写数据库配置类,数据库操作类;
    点CMS
    SQLServer 4类join查询:inner join,left join, right join, full outer join
    java的++i和i++的分析
  • 原文地址:https://www.cnblogs.com/the-tops/p/6508891.html
Copyright © 2020-2023  润新知