`
1028826685
  • 浏览: 936726 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类

apache kafka系列之Producer处理逻辑

 
阅读更多

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)

}

分享到:
评论

相关推荐

    Apache Kafka(带书签)

    - **流式处理**:结合Kafka Streams API或其他流处理框架(如Apache Flink或Apache Spark Streaming),可以实现实时数据处理和分析。 - **消息队列**:虽然Kafka最初是为了流处理而设计的,但它也可以用作传统的...

    Apache Kafka.docx

    Apache Kafka 是一个高度可扩展、分布式的流处理平台,专为构建实时数据管道和流应用程序而设计。Kafka 能够处理高吞吐量的数据,并支持多种消息传递模式,如发布-订阅、日志聚合以及事件源模式等。其主要用途包括...

    Introduction to Apache Kafka.pdf

    ### Apache Kafka介绍与核心知识点详解 #### 一、Apache Kafka概览 **Apache Kafka**是一种分布式提交日志服务,广泛应用于数据摄入场景。它提供了一系列关键特性,包括可扩展性、高性能、高可靠性和灵活性。从...

    Apache Kafka 0.9.0说明文档

    Apache Kafka 0.9.0 是一个开源的流处理平台,由LinkedIn开发并捐赠给了Apache软件基金会。这个版本的Kafka提供了可靠的消息传递系统,支持大规模数据集成、实时流处理和构建实时数据管道。Kafka的主要特点包括高...

    Apache Kafka 基本介绍.zip

    Apache Kafka 是一个开源的分布式流处理平台,由LinkedIn 开发并贡献给Apache 软件基金会。它最初设计为一个高吞吐量、低延迟的消息队列系统,现在已经成为大数据领域的重要组件,用于构建实时数据管道和流应用程序...

    第12单元 Kafka producer拦截器与Kafka Streams1

    拦截器的实现接口是org.apache.kafka.clients.producer.ProducerInterceptor,其定义的方法包括: * configure(configs):获取配置信息和初始化数据时调用。 * onSend(ProducerRecord):该方法封装进KafkaProducer....

    Java_Apache Kafka的教程和食谱.zip

    Apache Kafka 是一个分布式流处理平台,广泛用于构建实时数据管道和流应用。它以其高吞吐量、可扩展性和容错性而闻名。这个“Java_Apache Kafka的教程和食谱”压缩包包含了帮助你深入理解Kafka并熟练运用到Java开发...

    Apache Kafka

    ### Apache Kafka:分布式消息系统详解 #### 一、Apache Kafka简介 Apache Kafka是一款开源的分布式消息发布订阅系统,由LinkedIn公司开发并于2011年成为Apache顶级项目。它最初是为了处理LinkedIn内部的大规模...

    spring-kafka-producer-consumer-example_java_springboot_kafka_

    标题中的“spring-kafka-producer-consumer-example”表明这是一个关于Spring Boot应用,它使用了Apache Kafka作为消息中间件,展示了生产者(producer)和消费者(consumer)的实现。描述中的“Simple application ...

    kettle kafka 消息生产插件

    标题中的“kettle kafka 消息生产插件”指的是Pentaho Data Integration(通常称为Kettle或PDI)中的一款插件,它允许用户通过Kettle工作流将数据发布到Apache Kafka分布式消息系统。Kafka是一种高效、可扩展且容错...

    Learning Apache Kafka

    Apache Kafka是一个开源的流处理平台,最初是由LinkedIn公司开发的,后来成为了Apache软件基金会的一个项目。Kafka主要被用来构建实时数据管道和流应用程序。它具有高吞吐量、可扩展性和持久性的特点。在分布式系统...

    Java_该项目包含了一些示例,演示了如何利用Apache Kafka及其Streams API将分析模型部署到任务关.zip

    首先,Apache Kafka的核心概念包括主题(Topic)、生产者(Producer)、消费者(Consumer)以及broker。主题是数据的分类,生产者负责发布数据到主题,消费者则订阅并消费这些数据。Broker是Kafka集群中的节点,存储...

    jemter-kafka连接器

    在现代大数据处理系统中,Apache Kafka作为一款分布式消息中间件,广泛应用于实时数据流处理。为了验证和优化Kafka系统的性能,开发者通常需要进行大规模并发数据发送的测试。这时,JMeter,一个开源的性能测试工具...

    java开发kafka-clients所需要的所有jar包以及源码

    Java开发Kafka客户端是构建基于Apache Kafka的应用程序的关键步骤,Kafka-clients库提供了与Kafka服务器进行交互的API,支持生产者和消费者的实现。在Java中使用Kafka-clients,你需要包含相应的jar包,这些包包含了...

    kafka系列解读.pdf

    **Apache Kafka** 是一款高性能、分布式的发布-订阅消息系统,适用于处理大规模实时数据流。它最初由LinkedIn开发,后捐赠给Apache软件基金会,并成为顶级项目。Kafka的核心设计理念在于其能够提供一种高效的、持久...

    kafka系列文档-官方帮助文档中文翻译版

    《Kafka系列文档——官方帮助文档中文翻译版》是一份详尽解读Apache Kafka的重要资源,旨在帮助中文用户更好地理解和应用这一分布式流处理平台。Kafka是LinkedIn开发并贡献给Apache软件基金会的一个开源项目,它被...

    图解 Kafka 之实战指南

    **Kafka** 起初由LinkedIn采用Scala语言开发,后捐赠给Apache基金会,现已成为一款广泛应用于分布式流处理平台的成熟软件。它凭借高吞吐量、可持久化存储、水平扩展能力、支持流数据处理等特性而备受青睐。 #### 二...

    徐培成大数据架构师系列教程之2天Kafka教程

    《徐培成大数据架构师系列教程之2天Kafka教程》是针对大数据处理领域中重要组件Kafka的一次深入学习之旅。Kafka是由LinkedIn开发,后来成为Apache软件基金会的顶级项目,它是一款分布式流处理平台,广泛应用于实时...

    Flink和kafka的资源.rar

    4. **数据生产**:使用`FlinkKafkaProducer`将Flink处理后的结果写入Kafka主题。 在提供的压缩包文件列表中,有一个名为"kafka.pptx"的文件,这可能是关于Kafka的详细教程或演示文稿。打开这个文件,你可以深入了解...

Global site tag (gtag.js) - Google Analytics