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) } |
相关推荐
- **流式处理**:结合Kafka Streams API或其他流处理框架(如Apache Flink或Apache Spark Streaming),可以实现实时数据处理和分析。 - **消息队列**:虽然Kafka最初是为了流处理而设计的,但它也可以用作传统的...
Apache Kafka 是一个高度可扩展、分布式的流处理平台,专为构建实时数据管道和流应用程序而设计。Kafka 能够处理高吞吐量的数据,并支持多种消息传递模式,如发布-订阅、日志聚合以及事件源模式等。其主要用途包括...
### Apache Kafka介绍与核心知识点详解 #### 一、Apache Kafka概览 **Apache Kafka**是一种分布式提交日志服务,广泛应用于数据摄入场景。它提供了一系列关键特性,包括可扩展性、高性能、高可靠性和灵活性。从...
Apache Kafka 0.9.0 是一个开源的流处理平台,由LinkedIn开发并捐赠给了Apache软件基金会。这个版本的Kafka提供了可靠的消息传递系统,支持大规模数据集成、实时流处理和构建实时数据管道。Kafka的主要特点包括高...
Apache Kafka 是一个开源的分布式流处理平台,由LinkedIn 开发并贡献给Apache 软件基金会。它最初设计为一个高吞吐量、低延迟的消息队列系统,现在已经成为大数据领域的重要组件,用于构建实时数据管道和流应用程序...
拦截器的实现接口是org.apache.kafka.clients.producer.ProducerInterceptor,其定义的方法包括: * configure(configs):获取配置信息和初始化数据时调用。 * onSend(ProducerRecord):该方法封装进KafkaProducer....
Apache Kafka 是一个分布式流处理平台,广泛用于构建实时数据管道和流应用。它以其高吞吐量、可扩展性和容错性而闻名。这个“Java_Apache Kafka的教程和食谱”压缩包包含了帮助你深入理解Kafka并熟练运用到Java开发...
### Apache Kafka:分布式消息系统详解 #### 一、Apache Kafka简介 Apache Kafka是一款开源的分布式消息发布订阅系统,由LinkedIn公司开发并于2011年成为Apache顶级项目。它最初是为了处理LinkedIn内部的大规模...
标题中的“spring-kafka-producer-consumer-example”表明这是一个关于Spring Boot应用,它使用了Apache Kafka作为消息中间件,展示了生产者(producer)和消费者(consumer)的实现。描述中的“Simple application ...
标题中的“kettle kafka 消息生产插件”指的是Pentaho Data Integration(通常称为Kettle或PDI)中的一款插件,它允许用户通过Kettle工作流将数据发布到Apache Kafka分布式消息系统。Kafka是一种高效、可扩展且容错...
Apache Kafka是一个开源的流处理平台,最初是由LinkedIn公司开发的,后来成为了Apache软件基金会的一个项目。Kafka主要被用来构建实时数据管道和流应用程序。它具有高吞吐量、可扩展性和持久性的特点。在分布式系统...
首先,Apache Kafka的核心概念包括主题(Topic)、生产者(Producer)、消费者(Consumer)以及broker。主题是数据的分类,生产者负责发布数据到主题,消费者则订阅并消费这些数据。Broker是Kafka集群中的节点,存储...
在现代大数据处理系统中,Apache Kafka作为一款分布式消息中间件,广泛应用于实时数据流处理。为了验证和优化Kafka系统的性能,开发者通常需要进行大规模并发数据发送的测试。这时,JMeter,一个开源的性能测试工具...
Java开发Kafka客户端是构建基于Apache Kafka的应用程序的关键步骤,Kafka-clients库提供了与Kafka服务器进行交互的API,支持生产者和消费者的实现。在Java中使用Kafka-clients,你需要包含相应的jar包,这些包包含了...
**Apache Kafka** 是一款高性能、分布式的发布-订阅消息系统,适用于处理大规模实时数据流。它最初由LinkedIn开发,后捐赠给Apache软件基金会,并成为顶级项目。Kafka的核心设计理念在于其能够提供一种高效的、持久...
《Kafka系列文档——官方帮助文档中文翻译版》是一份详尽解读Apache Kafka的重要资源,旨在帮助中文用户更好地理解和应用这一分布式流处理平台。Kafka是LinkedIn开发并贡献给Apache软件基金会的一个开源项目,它被...
**Kafka** 起初由LinkedIn采用Scala语言开发,后捐赠给Apache基金会,现已成为一款广泛应用于分布式流处理平台的成熟软件。它凭借高吞吐量、可持久化存储、水平扩展能力、支持流数据处理等特性而备受青睐。 #### 二...
《徐培成大数据架构师系列教程之2天Kafka教程》是针对大数据处理领域中重要组件Kafka的一次深入学习之旅。Kafka是由LinkedIn开发,后来成为Apache软件基金会的顶级项目,它是一款分布式流处理平台,广泛应用于实时...
4. **数据生产**:使用`FlinkKafkaProducer`将Flink处理后的结果写入Kafka主题。 在提供的压缩包文件列表中,有一个名为"kafka.pptx"的文件,这可能是关于Kafka的详细教程或演示文稿。打开这个文件,你可以深入了解...