1.kafka消费者编程模型

分区消费模型

组(group)消费模型

1.1.1.分区消费架构图,每个分区对应一个消费者。

1.1.2.分区消费模型伪代码描述

指定偏移量,用于从上次消费的地方开始消费.

提交offset ,java客户端会自动提交的集群,所以这一步可选。

1.2.1.组消费模型架构图

每个组都消费该topic的全量数据,一条消息会发给groupA和groupB.

1.2.2.组消费模型伪代码:

流数N:表示一个consumer组里面有几个consumer 实例,上例中组A创建2个流,组B创建4个流。

1.2.3.consumer分配算法

当kafka的分区个数大于组A里consumer实例个数时,怎么去分配,以下为分配步骤:

Partition消费模型更加灵活但是:

(1)需要自己处理各种异常情况;

(2)需要自己管理offset(以实现消息传递的其他语义);

Group消费模型更加简单,但是不灵活:

(1)不需要自己处理异常情况,不需要自己管理offset;

(2)只能实现kafka默认的最少一次消息传递语义;

知识补充:消息传递的3中语义:

至少一次,(消息不会丢,消息者至少得到一次,但有可能会重复,生产者向消费者发送之后,会等待消费者确认,没收到确认会再发) (kafka 默认实现的语义)。

至多一次,(消息会丢)

有且只有一次。

fetchSize: 从服务器获取单包大小;

bufferSize: kafka客户端缓冲区大小;

group.id: 分组消费时分组名 (指定的每个组将获得全量的数据)

同步生产模型

异步生产模型

至少成功一次 , 发送给kafka消费者

打包发送给kafka broker。

main()

创建到kafka broker的连接:KafkaClient(host,port)

选择或者自定义生产者负载均衡算法 partitioner (算法有:hash,轮询,随机)

设置生产者参数 (缓存队列长度,发送时间,同步/异步参数设置)

根据负载均衡算法和设置的生产者参数构造Producer对象

while True

getMessage:从上游获得一条消息

按照kafka要求的消息格式构造kafka消息

根据分区算法得到分区

发送消息

处理异常

同步生产模型:

(1)低消息丢失率;

(2)高消息重复率(由于网络原因,回复确认未收到);

(3)高延迟 (每发一条消息需要确认)

(使用在不丢消息场景)

异步生产模型:

(1)低延迟;

(2)高发送性能;(每秒一个分区发50万条)

(3)高消息丢失率(无确认机制,发送端队列满了,消息会丢掉;整个队列发送给)

(使用在允许丢消息场景,偶尔丢一条)

//同步配置参数:

默认的序列化方式:字节序列化。

设定分区算法:默认是对key进行hash分区算法,可以自定义分区算法。

确认机制 request.require.acks: 合理设置为1; 0: 绝不等确认 1: leader的一个副本收到这条消息,预科班并发回确认 -1: leader的所有副本都收到这条消息,并发回确认

消息是以key-value的形式发送的,key必须要设置。

message.send.max.retries: 发送失败重试次数;

retry.backoff.ms :未接到确认,认为发送失败的时间;

producer.type: 同步发送或者异步发送;

batch.num.messages: 异步发送时,累计最大消息数;

queue.buffering.max.ms:异步发送时,累计最大时间;

本文版本主要是针对0.8.2,配套学习教程,浪尖已经分享到了知识星球。


文章来源:https://blog.csdn.net/rlnLo2pNEfx9c/article/details/80491144

kafka的编程模型的更多相关文章

  1. Kafka 温故(五):Kafka的消费编程模型

    Kafka的消费模型分为两种: 1.分区消费模型 2.分组消费模型 一.分区消费模型 二.分组消费模型 Producer : package cn.outofmemory.kafka; import ...

  2. storm的trident编程模型

    storm的基本概念别人总结的, https://blog.csdn.net/pickinfo/article/details/50488226 编程模型最关键最难就是实现局部聚合的业务逻辑聚合类实现 ...

  3. DataFlow编程模型与Spark Structured streaming

    流式(streaming)和批量( batch):流式数据,实际上更准确的说法应该是unbounded data(processing),也就是无边界的连续的数据的处理:对应的批量计算,更准确的说法是 ...

  4. Storm介绍及核心组件和编程模型

    离线计算 离线计算:批量获取数据.批量传输数据.周期性批量计算数据.数据展示 代表技术:Sqoop批量导入数据.HDFS批量存储数据.MapReduce批量计算数据.Hive批量计算数据.azkaba ...

  5. storm介绍,核心组件,编程模型

    一.流式计算概念 利用分布式的思想和方法,对海量“流”式数据进行实时处理,源自业务对海量数据,在“时效”的价值上的挖掘诉求,随着大数据场景应用场景的增长,对流式计算的需求愈发增多,流式计算的一般架构图 ...

  6. Storm 第一章 核心组件及编程模型

    1 流式计算 流式计算:数据实时产生.实时传输.实时计算.实时展示 代表技术:Flume实时获取数据.Kafka/metaq实时数据存储.Storm/JStorm实时数据计算.Redis实时结果缓存. ...

  7. Storm集群组件和编程模型

     Storm工作原理: Storm是一个开源的分布式实时计算系统,常被称为流式计算框架.什么是流式计算呢?通俗来讲,流式计算顾名思义:数据流源源不断的来,一边来,一边计算结果,再进入下一个流. 比 ...

  8. Spark流式编程介绍 - 编程模型

    来源Spark官方文档 http://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#programm ...

  9. Flink入门(四)——编程模型

    flink是一款开源的大数据流式处理框架,他可以同时批处理和流处理,具有容错性.高吞吐.低延迟等优势,本文简述flink的编程模型. 数据集类型: 无穷数据集:无穷的持续集成的数据集合 有界数据集:有 ...

随机推荐

  1. 单页面应用程序(SPA)的优缺点

    我们通常所说的单页面应用程序通常通过前端框架(angular.react.vue)进行开发,单页面应用程序将所有的活动局限于一个Web页面中,仅在该Web页面初始化时加载相应的HTML.JavaScr ...

  2. 这两天的pwn学习总结

    总是一会儿切到那里,一会儿切到那里,要明确一条主线,就是buu的题,而不是按着什么视频教程还有linux和python教程去学习.那样效率比较低. 一切为了写wp为本,不胡乱点击就是提高效率的最好办法 ...

  3. 【剑指Offer面试编程题】题目1386:旋转数组的最小数字--九度OJ

    题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转 ...

  4. eclipse 编辑窗口不见了(打开左边的java、xml文件,中间不会显示代码)

    参考:https://blog.csdn.net/u012062810/article/details/46729779

  5. 《Redis深度历险:核心原理和应用实践》千帆竞发——分布式锁

  6. 9.2.1 hadoop mapreduce任务输出的默认排序

    任务的默认排序 MapTask和ReduceTask都会默认对数据按照key进行排序,不管逻辑上是否需要.默认是按照字典顺序排序,且实现该排序的方法是快速排序.但是map和reduce任务只能保证单个 ...

  7. Jquery实现下拉tab切换

    //需求:分别点击html,css,js元素时展示对应的列表内容,其他列表内容要自动收起来 //代码如下 <!DOCTYPE html> <html lang="en&qu ...

  8. 标准查询运算符---LINQ

    Where 根据给定的谓词对序列进行过滤 Select 指定要包含一个对象或对象的一部分 SelectMany 一种查询类型,返回集合的集合.该方法将这些结果合并为一个单独的集合 Take 接受一个输 ...

  9. POJ 3273:Monthly Expense 二分好题啊啊啊啊啊啊

    Monthly Expense Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 19207   Accepted: 7630 ...

  10. bootstrap点击下拉菜单没反应

    出现这个问题一般就涉及 网页脚本的问题 好好看看自己网页 scripts 编写是否正确 也可以通过浏览器的 F12 进入console 控制台看看是什么问题 总的来说 该错误要从网页脚本编写的问题出发 ...