produce是kafka的消息发送者,负责将消息发送到kafka代理服务器(broker)指定的topic下的某个partition

一:消息的分布
假设现在一个topic下有两个partition,下面是一个produce按照顺序发送四条消息之后,partition中的情况

注意:partition1和partition2都是leader,它俩可不是副本关系


可以看到消息是大致按照图中的样子存储的,主要想阐述的就是分片这个概念,目的是为了减少每个partition的存储数据量,同时也为了消费端可以从多个partition同时取数据,那么这四条数据真实情况到底都存储到哪个partition呢?其实我也不知道,我没有测试,但是只要是分布式架构的中间件,必定遵循分布式理论,也就是说数据的分布方式只有可能是下面三种:
1.hash分布(kafka默认的分布方式)
2.按照数据范围分布(按照数据特征分布)
3.按照数据量分布
所以感兴趣的朋友可以自己测试一下,数据使用hash算法之后,分布到哪个partition,不过我觉得意义不大,我们研究的是kafka的设计思想,而不是这种小事

二:消息的持久化(如何确保消息不丢失)
在研究消息质量保证之前,必须要了解partition副本同步机制,你可以点击这里查看关于partition同步机制

producer只是跟broker中的leader partition交互,不与follower partition交互
参数acks有四个值,分三种情况
acks=0:producer将消息扔给broker(就是leader partition)之后,就认为发送成功,如果出现网络瞬断,这种情况有可能消息丢失
acks=1:producer将消息扔给leader partition之后,等待leader partition数据持久到本地(commit log文件中),持久化完毕之后,认为发送成功
acks=-1:producer讲消息扔给leader partition之后,不但要等待leader partition将数据持久到本地,还要等待follower将leader数据同步过去之后,才认为发送成功,这场景很适合重要的数据,比如订单,银行
acks=all:与-1完全一样

日记:acks=-1可以和min.insync.replicas参数配合使用,假设一共有3个副本,
设置min.insync.replicas=2,
设置acks=-1,
那等待两个副本写入完毕,就返回,而不是三个副本全都写入完毕

三:缓冲区
buffer_memory参数:发送者会将要发送的数据都扔到缓冲区,然后在缓冲区组装batch包,最后将batch发送出去,注意这不是缓冲多少再发送,而是从缓冲区拿数据,拼装batch,然后发送batch
batch_size参数:当每条消息的总大小达到多少时,发送该条消息
linger_ms参数:如果batch不满,总不能不发吧,这个就是达到多少毫秒后,如果batch还没满,依然会发送出去

Kafka-produce(发送者)相关推荐

  1. Boost:基于Boost的发送者和接收者的测试程序

    Boost:基于Boost的发送者和接收者的测试程序 实现功能 C++实现代码 发送者源码 接收者源码 实现功能 基于Boost的发送者和接收者的测试程序 C++实现代码 发送者源码 #include ...

  2. 在as3中只有事件(或该事件的子级)的发送者才能侦听事件

    在as3中只有事件(或该事件的子级)的发送者才能侦听事件, 与该发送者无关系的 对象 是侦听不到的, 因为事件流模型,冒泡,事件目标对象 解决办法可以用stage统一发送和侦听 补:用stage统一是 ...

  3. 请求发送者与接收者解耦——命令模式

    本文转载自 :http://blog.csdn.net/lovelion/article/details/8796736 装修新房的最后几道工序之一是安装插座和开关,通过开关可以控制一些电器的打开和关 ...

  4. windows7 python 指定源组播 10049_Python3组播通信编程实现教程(发送者+接收者)

    一.说明 1.1 标准组播解释 通信分为单播.多播(即组播).广播三种方式 单播指发送者发送之后,IP数据包被路由器发往目的IP指定的唯一一台设备的通信形式,比如你现在与web服务器通信就是单播形式 ...

  5. php弹幕反检测,【原理讲解附源码】找到B站弹幕的发送者

    本帖最后由 厄斐琉斯 于 2020-7-31 23:19 编辑 特别鸣谢:感谢Hatsune_miku前辈在github上开源的部分源码 声明:任何人不得将其用于任何商业目的,否则后果自负! 前言:之 ...

  6. 广播发送者广播接收者介绍

    1.广播接收者 广播接收者简单地说就是接收广播意图的Java类,此Java类继承BroadcastReceiver类,重写: public void onReceive(Context context ...

  7. 追踪邮件发送者的地理位置

    今天偶然发现Gmail可以追踪发送者的IP位置,于是忍不住跃跃欲试. 邮件不只有文本内容,还有额外的信息在每个邮件的header里面,一般的邮件客户端都是不能查看header的,Gmail和雅虎邮箱可 ...

  8. php发送 日历邮件_如何阻止垃圾邮件发送者攻击您的Google日历

    php发送 日历邮件 Spammers have found a way to add unwanted phishing and scam events to people's Google Cal ...

  9. 使用ESP8266信标垃圾邮件发送者来跟踪智能手机用户

    使用ESP8266信标垃圾邮件发送者来跟踪智能手机用户 智能手机和笔记本电脑不断发送Wi-Fi无线电信号,其中许多信号可用于跟踪我们.在本指南中,我们将在Arduino中编写一个廉价的物联网设备,以创 ...

最新文章

  1. 常见Jvm面试题总结及答案整理 120道(持续更新)
  2. yanf4j引入了客户端非阻塞API
  3. 【学习笔记】Python - Lxml
  4. C++设计模式之工厂模式(1)
  5. 云主机安装linux发行版,用Ubuntu服务器版部署一个私有云
  6. 算法原理与分析第二次作业
  7. ssl 命令访问其他的服务器
  8. 【java学习之路】(java SE篇)001.java初识
  9. attrib批量显示文件夹_CMD中使用attrib命令设置文件只读、隐藏属性详解
  10. USB 协议整理 八:STM32官方USB库
  11. 【电脑使用】如何快速给PDF添加书签
  12. 模拟实现一个银行的取号机
  13. stm32f4有重映射么_STM32 端口复用重映射(USART Remap)
  14. stm32F407按键例程安富莱
  15. TVP周年庆:“用科技影响世界”,一起出发!
  16. 在ssd上win10和linux双系统,windows 10 ssd ubuntu hdd双系统
  17. 超详细|算法岗学习路线大总结
  18. 用 Python 给女友做了个可能会被打死的七夕礼物 !
  19. C:1094统计元音(函数专题)
  20. 2021起重机作业 (Q)Q3起重机械指挥模拟考试题库及软件

热门文章

  1. python布局管理数据_利用python创建窗口-布局管理器(五)
  2. Spring Data Jpa的@Temporal注解
  3. mysql接口教程_接口测试教程 - xmysql 介绍
  4. boot入门思想 spring_微服务架构之SpringBoot详解,夯实底层知识,带你轻松入门开发...
  5. c#里面的combobox在代码中怎么根据它的text获取它的index?
  6. 部署 SaltStack 自动化运维工具,并简易批量安装 httpd 服务
  7. PostgreSQL的实践一:数据类型(一)
  8. 函数式编程了解一下(上)
  9. HBase: HMaster服务自动停止,且关闭集群时HRegionserver无法关闭的问题解决
  10. 调整KDevelop字体大小