Kafka教程(二)API开发-生产者、消费者、topic
一、地址
1、实时更新的思维导图
https://www.mubucm.com/doc/4uqlpedefuj
2、图片

二、具体内容
- 5.producer生产者
- demo
- 发送pro.send(new ProducerRecord<String,String>("test","123"))
- ProducerRecord的属性
- 重载方法234
- 只topic和内容
- 多key
- hash(key)确定发送的分区
- 多key和partition
- key不起作用,发到指定分区
- topic
- partiton
- headers
- K
- 用于hash计算分区
- V
- 发送的消息值
- timestamp
- ack应答机制
- 用于保证数据发送可靠
- 必要参数
- bootstrap.servers:整个集群的地址
- 发送模式
- 发后即忘
- producer.send(rcd)
- 同步发送sync
- send(rcd).get()
- 异步发送async
- send(rcd,new CallBack(){onCompletion(){xxxx}})
- 6.consumer消费者
- demo
- 订阅多个topic
- poll(time超时时间)获取消息ConsumerRecord
- record包含的内容.get
- offset
- key
- value
- 必要参数
- group id
- bootstrap.servers
- 无需设置整个集群,只需设置单个
- 消息订阅
- subscribe订阅
- 重载方法*4
- ConsumerRebalanceListener再均衡监听器?
- 方式
- 指定集合方式
- 正则方式订阅
- 传参Pattern.compile("ods_*")
- assign订阅
- consumer.assign(Collection<TopicPartition> collection)
- 可以手动订阅多个topic的指定分区
- 单个:Arrays.asList(new TopicPartition("topic1",0))
- 区别
- 粒度
- topic粒度(group管理)
- topic-partition粒度(自己管理)
- 是否具有rebalance分区再均衡功能
- 取消订阅
- consumer.unsubscribe()
- subscribe(new ArrayList<T>())
- String
- TopicPatition
- 消费模式
- 拉取模式poll(time)
- time为阻塞时间(多久拉一次)
- 设置为Long.MAX_VALUE,可以提高吞吐率
- 消息类型ConsumerRecord
- ConsumerRecords<String,String> records=consumer.poll(100)
- ConsumerRecord rd=records.record(new TopicPartition("topic1",0))
- 提交偏移量
- 指定位移消费
- consumer.seek(TopicPartition,offset)
- 自动提交
- 两个配置
- auto.commit
- interval.ms
- 到点提交各分区最大位移
- 默认true,5000
- 存在问题
- 重复消费
- 消费者崩溃
- 丢失消息
- 拉取消息放入阻塞队列BlockingQueue
- 阻塞队列的处理线程异常,从上次提交的位移处消费
- 即实际消费到了3,已经提交了6
- 手动提交
- 调用API实现
- 关闭自动提交:auto.commit设为false
- 类型
- 同步提交
- commitSync()-处理完提交(提交和拉取会阻塞)
- 含参commitAsync(Map<TopicPatition,OffsetAndMetaData>)
- record获取offset,+1后作为Meta构造参数
- 提交的偏移量是消费完record的偏移量+1
- 异步提交
- 提交和拉取不会阻塞,提高消费者性能
- 重载的commitAsync
- commitAsync()
- commitAsync(OffsetCommitCallback)-带回调
- commitAsync(Map<TopicPatition,OffsetAndMetaData>,OffsetCommitCallback)-指定分区&偏移量+回调
- 手动提交的时机
- 处理完成前提交
- 存在漏处理(数据丢失)
- 实现了at most once语义
- 处理完成后提交
- 存在重复处理/消费(数据重复)
- 原因:处理后提交前出bug
- 实现了at least once语义
- 理想语义:Exactly once(精确一次)
- ★通过kafka的事务机制实现
- 提交方式总结
- 全自动
- 半自动
- 全手动
- 提交的位置:__consumer_offset
- 重要参数介绍
- 一次拉取的最大最小数据量
- 拉取的最大等待时长
- 每个分区拉取的最大数据量
- 一次拉取的最大条数
- 等待请求响应、闲置、重试间隔
- 消息隔离级别:读未提交或已提交
- read_uncommit:能消费到LSO
- read_committed:可以消费到HW
- 超时时长,超过认为消费者已离开cg
- 7.topic管理
- 工具类KafkaAdminClient
- 用于集成内部系统,实现多功能的生态平台
- 功能:管理broker、配置、ACL、管理topic
- 创建方式:KafkaAdminClient.create(props)
- 列出主题
- listTopics()
- 查看主题信息
- describeTopics(Arrays.asList(xx,yy))
- 创建主题
- createTopics(new NewTopic(name,replicaAssignment))
- 删除主题
- deleteTopics(Arrays.asList(xx,yy))
- 其他管理
- 动态参数管理
- 修改配置:alterConfigs(Map<ConfigResource,Config>)
- 分区管理
- 新增分区:createPartitions(Map<String,NewPartitions> map)
Kafka教程(二)API开发-生产者、消费者、topic的更多相关文章
- Hadoop生态圈-Kafka的旧API实现生产者-消费者
Hadoop生态圈-Kafka的旧API实现生产者-消费者 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.旧API实现生产者-消费者 1>.开启kafka集群 [yinz ...
- Hadoop生态圈-Kafka的新API实现生产者-消费者
Hadoop生态圈-Kafka的新API实现生产者-消费者 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- Kafka 教程(二)-安装与基础操作
单机安装 1. 安装 java 2. 安装 zookeeper [这一步可以没有,因为 kafka 自带了 zookeeper] 3. 安装 kafka 下载链接 kafka kafka 是 scal ...
- 使用Win32 API实现生产者消费者线程同步
使用win32 API创建线程,创建信号量用于线程的同步 创建信号量 语法例如以下 HANDLE semophore; semophore = CreateSemaphore(lpSemaphoreA ...
- RabbitMQ入门学习系列(二),单生产者消费者
友情提示 我对我的文章负责,发现好多网上的文章 没有实践,都发出来的,让人走很多弯路,如果你在我的文章中遇到无法实现,或者无法走通的问题.可以直接在公众号<爱码农爱生活 >留言.必定会再次 ...
- 【Windows】用信号量实现生产者-消费者模型
线程并发的生产者-消费者模型: 1.两个进程对同一个内存资源进行操作,一个是生产者,一个是消费者. 2.生产者往共享内存资源填充数据,如果区域满,则等待消费者消费数据. 3.消费者从共享内存资源取数据 ...
- Python 使用python-kafka类库开发kafka生产者&消费者&客户端
使用python-kafka类库开发kafka生产者&消费者&客户端 By: 授客 QQ:1033553122 1.测试环境 python 3.4 zookeeper- ...
- Kafka技术内幕 读书笔记之(三) 生产者——消费者:高级API和低级API——基础知识
1. 使用消费组实现消息队列的两种模式 分布式的消息系统Kafka支持多个生产者和多个消费者,生产者可以将消息发布到集群中不同节点的不同分区上:消费者也可以消费集群中多个节点的多个分区上的消息 . 写 ...
- centos7单机安装kafka,进行生产者消费者测试
[转载请注明]: 原文出处:https://www.cnblogs.com/jstarseven/p/11364852.html 作者:jstarseven 码字挺辛苦的..... 一.k ...
- kafka集群搭建和使用Java写kafka生产者消费者
1 kafka集群搭建 1.zookeeper集群 搭建在110, 111,112 2.kafka使用3个节点110, 111,112 修改配置文件config/server.properties ...
随机推荐
- Nginx服务器性能优化与安全配置实践指南
转载自:https://www.bilibili.com/read/cv16151784?spm_id_from=333.999.0.0 1.引言 1.1 目的 为了更好的指导部署与测试艺术升系统ng ...
- Elasticsearch 索引生命周期管理 ILM 实战指南
文章转载自:https://mp.weixin.qq.com/s/7VQd5sKt_PH56PFnCrUOHQ 1.什么是索引生命周期 在基于日志.指标.实时时间序列的大型系统中,集群的索引也具备类似 ...
- Deployment必须包含资源对象
Deployment 是一个控制器,能够用来控制 pod 数量跟期望数量一致,配置 pod 的发布方式 Deployment 会按照给定策略进行发布指定 pod,保证在更新过程中不可用数量在限定范围内 ...
- Elastic Stack 8.0 再次创建enrollment token
enrollment token 在第一个 Elasticsearch 启动后的有效时间为30分钟.超过30分钟的时间上述 token 将会无效. enrollment token分两个,一个是kib ...
- 第一个Django应用 - 第一部分:请求与响应
一. 新建项目 进入你期望的项目保存目录,运行下面的命令: $ django-admin startproject mysite 这将在目录下生成一个mysite目录,也就是你的这个Django项目的 ...
- CentOS无法识别NTFS格式U盘完美解决方案
问题描述:CentOS上无法识别NTFS格式的U盘 解决方案: # 进入yum目录 cd /etc/yum.repos.d # 下载阿里的epel wget http://mirrors.aliyun ...
- FastDFS 分布式文件系统的安装与使用---两台服务器搭建FastDFS环境
写在前面 有不少小伙伴在实际工作中,对于如何存储文件(图片.视频.音频等)没有一个很好的解决思路.都明白不能将文件存储在单台服务器的磁盘上,也知道需要将文件进行副本备份.如果自己手动写文件的副本机制, ...
- PAT (Basic Level) Practice 1030 完美数列 分数 25
给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列. 现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列. 输入格 ...
- 工厂有了 ERP 系统,为什么还要上 MES 系统?
工厂可以没有ERP,但如果要用系统,必定是MES系统!所以即使工厂有了ERP,也还是要上MES系统的.产生这样的疑问很重要的一个原因是没有明确ERP与MES到底是啥.ERP是Enterprise Re ...
- 整理一些Windows桌面运维常用的命令,并且整合成脚本
github地址:alittlemc/toy: 编写些脚本将运维经常所用到小玩意所集成在一起 (github.com) 持续更新! 前言 做过桌面运维的大佬们应该可以很明显感受到这份工作所需要的技能不 ...