Kafka·Producer

2024-08-24 19:20
文章标签 kafka producer

本文主要是介绍Kafka·Producer,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Producer发送原理

  1. 拦截器进行拦截
    在这里插入图片描述

  2. 对key和value进行序列化
    org.apache.kafka.clients.producer.KafkaProducer#doSend
    在这里插入图片描述

  3. 分区选择
    计算消息要发送到topic的哪个分区上
    在这里插入图片描述
    在这里插入图片描述

    • 若指定了分区,则使用指定的值
    • 没有指定的话则使用分区器计算得到
    • 或者使用hash取余的方式
  4. 暂存消息到累加器
    Producer并不会立刻发送消息到Broker中,而是把消息暂存到累加器中,当消息达到一定量后,再异步批量发送
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
    消息被暂存到这样一个结构中,可以看到每个topic中,按照分区将消息暂存到一个Deque中
    在这里插入图片描述在这里插入图片描述

  5. acks
    acks,消息发送后的确认机制

    • acks = 0:发送即确认
    • acks = 1:消息在leader落盘后确认
    • acks = all/-1:默认值,leader等待其他follower(ISR中的follower)都同步后回复确认
  6. 重试

  7. 幂等性
    开启幂等性配置(enable.idempotence默认true)后,生产者发送消息时,除了key-value,还会发送PID和Sequence Number。

    • PID:用来标识生产者
    • Sequence Number:表示消息的序列号,每次发送消息都会+1产生新的序列号(连续)

    也就是说PID和Sequence Number会跟随key-value一并先暂存于累加器中,最后发送到Broker中,当broker应答异常,Producer会进行重试发送

    消息发送到Broker后,虽然由于某些原因造成了生产者重试发送消息,但前一条消息可能已经成功落盘到Broker了,当重试发送的消息到达broker后,会通过PID和Sequence Number来判断

    • 若本次消息的Sequence Number 小于或等于 上一次消息的Sequence Number,说明消息重复,丢弃本次消息
    • 若本次消息的Sequence Number 大于 (上一次消息Sequence Number+1),说明存在消息丢失现象,然后抛异常

    虽然是否开启幂等性是在Producer配置的,但是幂等性是在broker中解决的(在Broker中判断PID和Sequence Number)

这篇关于Kafka·Producer的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1103373

相关文章

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

Kafka拦截器的神奇操作方法

《Kafka拦截器的神奇操作方法》Kafka拦截器是一种强大的机制,用于在消息发送和接收过程中插入自定义逻辑,它们可以用于消息定制、日志记录、监控、业务逻辑集成、性能统计和异常处理等,本文介绍Kafk... 目录前言拦截器的基本概念Kafka 拦截器的定义和基本原理:拦截器是 Kafka 消息传递的不可或缺

如何在一台服务器上使用docker运行kafka集群

《如何在一台服务器上使用docker运行kafka集群》文章详细介绍了如何在一台服务器上使用Docker运行Kafka集群,包括拉取镜像、创建网络、启动Kafka容器、检查运行状态、编写启动和关闭脚本... 目录1.拉取镜像2.创建集群之间通信的网络3.将zookeeper加入到网络中4.启动kafka集群

IDEA中的Kafka管理神器详解

《IDEA中的Kafka管理神器详解》这款基于IDEA插件实现的Kafka管理工具,能够在本地IDE环境中直接运行,简化了设置流程,为开发者提供了更加紧密集成、高效且直观的Kafka操作体验... 目录免安装:IDEA中的Kafka管理神器!简介安装必要的插件创建 Kafka 连接第一步:创建连接第二步:选

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

Java消息队列:RabbitMQ与Kafka的集成与应用

Java消息队列:RabbitMQ与Kafka的集成与应用 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在现代的分布式系统中,消息队列是实现系统间通信、解耦和提高可扩展性的重要组件。RabbitMQ和Kafka是两个广泛使用的消息队列系统,它们各有特点和优势。本文将介绍如何在Java应用中集成RabbitMQ和Kafka,并展示它们的应用场景。 消息队

Kafka (快速)安装部署

文章目录 1、软件下载&配置环境1_JDK安装2_Zookeeper安装3_Kafka安装 2、单机安装1_配置主机名和IP映射2_单机Kafka配置 3、集群安装1_配置主机名和IP的映射关系2_时钟同步3_Zookeeper配置信息4_集群Kafka配置 4、kafka的其他脚本命令 1、软件下载&配置环境 下面的操作无论是单机部署还是分布式集群环境下都是通用的。 准

Kafka 分布式消息系统详细介绍

Kafka 分布式消息系统 一、Kafka 概述1.1 Kafka 定义1.2 Kafka 设计目标1.3 Kafka 特点 二、Kafka 架构设计2.1 基本架构2.2 Topic 和 Partition2.3 消费者和消费者组2.4 Replica 副本 三、Kafka 分布式集群搭建3.1 下载解压3.1.1 上传解压 3.2 修改 Kafka 配置文件3.2.1 修改zookeep

Kafka 实战演练:创建、配置与测试 Kafka全面教程

文章目录 1.配置文件2.消费者1.注解方式2.KafkaConsumer 3.依赖1.注解依赖2.KafkaConsumer依赖 本文档只是为了留档方便以后工作运维,或者给同事分享文档内容比较简陋命令也不是特别全,不适合小白观看,如有不懂可以私信,上班期间都是在得 1.配置文件 Yml配置 spring:kafka:bootstrap-servers: cons

Kafka【十二】消费者拉取主题分区的分配策略

【1】消费者组、leader和follower 消费者想要拉取主题分区的数据,首先必须要加入到一个组中。 但是一个组中有多个消费者的话,那么每一个消费者该如何消费呢,是不是像图中一样的消费策略呢?如果是的话,那假设消费者组中只有2个消费者或有4个消费者,和分区的数量不匹配,怎么办? 所以这里,我们需要学习Kafka中基本的消费者组中的消费者和分区之间的分配规则: 同一个消费者组的消费者都订