kafka的编程模型
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的编程模型的更多相关文章
- Kafka 温故(五):Kafka的消费编程模型
Kafka的消费模型分为两种: 1.分区消费模型 2.分组消费模型 一.分区消费模型 二.分组消费模型 Producer : package cn.outofmemory.kafka; import ...
- storm的trident编程模型
storm的基本概念别人总结的, https://blog.csdn.net/pickinfo/article/details/50488226 编程模型最关键最难就是实现局部聚合的业务逻辑聚合类实现 ...
- DataFlow编程模型与Spark Structured streaming
流式(streaming)和批量( batch):流式数据,实际上更准确的说法应该是unbounded data(processing),也就是无边界的连续的数据的处理:对应的批量计算,更准确的说法是 ...
- Storm介绍及核心组件和编程模型
离线计算 离线计算:批量获取数据.批量传输数据.周期性批量计算数据.数据展示 代表技术:Sqoop批量导入数据.HDFS批量存储数据.MapReduce批量计算数据.Hive批量计算数据.azkaba ...
- storm介绍,核心组件,编程模型
一.流式计算概念 利用分布式的思想和方法,对海量“流”式数据进行实时处理,源自业务对海量数据,在“时效”的价值上的挖掘诉求,随着大数据场景应用场景的增长,对流式计算的需求愈发增多,流式计算的一般架构图 ...
- Storm 第一章 核心组件及编程模型
1 流式计算 流式计算:数据实时产生.实时传输.实时计算.实时展示 代表技术:Flume实时获取数据.Kafka/metaq实时数据存储.Storm/JStorm实时数据计算.Redis实时结果缓存. ...
- Storm集群组件和编程模型
Storm工作原理: Storm是一个开源的分布式实时计算系统,常被称为流式计算框架.什么是流式计算呢?通俗来讲,流式计算顾名思义:数据流源源不断的来,一边来,一边计算结果,再进入下一个流. 比 ...
- Spark流式编程介绍 - 编程模型
来源Spark官方文档 http://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#programm ...
- Flink入门(四)——编程模型
flink是一款开源的大数据流式处理框架,他可以同时批处理和流处理,具有容错性.高吞吐.低延迟等优势,本文简述flink的编程模型. 数据集类型: 无穷数据集:无穷的持续集成的数据集合 有界数据集:有 ...
随机推荐
- java set的线程安全
CopyOnWriteArraySet和ConcurrentSkipListSet 与线程不安全的集合类的对应关系 HashSet -> CopyOnWriteArraySet TreeSet ...
- TP-Link TL-WR841N v14 CVE-2019-17147 缓冲区溢出漏洞分析笔记v2018.12.31
0x00 背景 Httpd服务中的缓冲区溢出漏洞 复现参考文章https://www.4hou.com/posts/gQG9 Binwalk -Me 解压缩 File ./bin/busybox文件类 ...
- Django3.0中向后不兼容的更改
3.0中向后不兼容的更改 数据库后端API 本节描述了第三方数据库后端中可能需要的更改. 现在的第二个参数DatabaseIntrospection.get_geometry_type()是行描述,而 ...
- js网页拉起支付宝支付
js网页唤起支付宝进行支付 在做uni-app项目中,打包成 ios App的时候,为了绕过苹果支付的审核,所以用的 webview 加载支付宝的网页支付,进行付款 具体实现流程: 前端通过 url ...
- os期末复习
登记之后会发生两个变化:读者数增加(v操作).座位数减少(p操作) 注销之后会发生的变化:读者数减少(p操作).座位数增加(v操作) 必须要清楚释放的是甚麽,以及申请的是甚麽资源(在具体的题目当中) ...
- ajax请求QQ音乐
搜索歌曲 function go() { var val = document.getElementById("name").value; ...
- 玩玩负载均衡---在window与linux下配置nginx
最近有些时间,开始接触负载均衡方面的东西,从硬件F5再到Citrix Netscalar.不过因为硬件的配置虽然不复杂,但昂贵的价格也让一般用户望而却步(十几万到几十万),所以只能转向nginx, ...
- js获取cookie提取用户名asp.net+html
JavaScript是运行在客户端的脚本,因此一般是不能够设置Session的,因为Session是运行在服务器端的. 而cookie是运行在客户端的,所以可以用JS来设置cookie. 假设有这样一 ...
- NO18 linux开机自启动设置--开机流程--中文乱码--查看行数
第八题:装完系统后,希望让网络文件共享服务NES,仅在3级别上开机自启动,该如何做? 解答:什么是开机自启动,在Linux下软件服务随系统启动而启动的配置. 方法一:文件配置法,可以把要启动的服务的命 ...
- 第3节 sqoop:5、实现数据的控制导入
导入表数据子集 我们可以导入表的使用Sqoop导入工具,"where"子句的一个子集.它执行在各自的数据库服务器相应的SQL查询,并将结果存储在HDFS的目标目录. where子句 ...