kafka事务transactional.id相关

 

https://www.cnblogs.com/jingangtx/p/11330338.html

https://blog.csdn.net/oTengYue/article/details/104727512/

 

看了这两篇关于事务id的资料,

我有些疑问:

 

两篇文章里都讲了transactional.id是用户自己设置的,而且transactional.id与producerId在事务管理器中是一一对应关系。

即transactional.id作为key,producerId作为value这样的键值对方式存储在事务管理器中,

当producer恢复时,会通过用户自己指定的transactional.id从事务管理器获取producerId,以此来确保幂等性不同会话之间发送数据的幂等性。

 

但是,一般都是多个producer会向同一个topic的同一个partition发送数据,而我们开发时,如果把transactional.id写死在代码中,或者写在.properties和.yaml中,那么我们集群部署producer(多个spring boot项目),那么这多个spring boot项目的kafka producer的transactional.id岂不是都一样?

当多个producer的transactional.id都一样时,在这篇文章中又有如下描述:

文章链接:https://www.cnblogs.com/middleware/p/9477133.html

按这篇文章说的,如果具有相同的transactional.id的producer只能同时有一个正在工作,但生产者不可能只有一个在工作,肯定是多个生产生都生产数据到指定topic的不同分区。要么没有key而采用轮询等策略、要么就是使用key求hash再求余、又或者指定分区号。

但这些都表明肯定有多个producer一起生产数据。

所以,如果某个producer宕机重启前后两次不同的会话的producerID要一样,那么就必须每个producer都拥有一个固定且又不同的transactional.id,

是否如此??

 

如果是这么回事的话,那么transactional.id就不能通过写死的方式解决,或者说,需要根据producer部署在不同机器上之后,再给每个机器上的producer设置一个特定的transactional.id。

这样做会很麻烦,因为自动化部署的时候,比如使用jenkins,maven打包项目、部署项目这些东西都是同一套,配置文件也是一模一样的。除非部署时写脚本根据不同机器设置不同的transactional.id,但这样,以后出了问题解决困难。

最后想到一种不知是否可行:

获取本机ip作为transactional.id(最好是每台机器主机名不一样,那么就可以用主机名,这样以后换机器,只要主机名改成一样的就可以)

 

 

对于上面提到的问题,后续再研究源码看看。

 

 

 

 

 

 

 

热门文章

暂无图片
编程学习 ·

【MPI编程实现梯形积分法】

MPI编程实现梯形积分法1.1问题描述1.2算法实现1.3结果实现与分析1.4源码实现 1.1问题描述 实现课件中的梯形积分法的MPI编程熟悉并掌握MPI编程方法,规模自行设定,可探讨不同规模对不同实现方式的影响。实验环境:联想笔记本,集成开发环境:Visual Studio 1.2算法实现 每个进…
暂无图片
编程学习 ·

Qt使用Unicode转义序列创建QString

(1)源文件保存为UTF-8,QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));#include "mainwidget.h" #include <QApplication> #include <QTextEdit> #include <QTextCodec>int main(int argc, char *argv[]) {QAppl…
暂无图片
编程学习 ·

RFID资产管理解决方案-RFID固定资产管理-新导智能

RFID资产管理解决方案系统集成了技能含量很高的远间隔无线射频辨认技能、短间隔射频技能及多用户防抵触技能监测技能,标签、定位器、读写器、通讯网关等,选用全新的嵌入式微处理器和嵌入式软件进行规划,体系信号穿透力强,对人体无电磁污染、环境适应性强,可一起定位多个标…
暂无图片
编程学习 ·

操作系统虚拟页的页表表项

为了能够实现页面置换算法中的请求调页,需要在页表的下面增加一些位,来辅助完成这样的工作。 每一页上的表项里面有4个位是比较重要: 逻辑页号------------访问位--------修改位--------保护位----------驻留位----------物理页帧号 驻留位 表示该页是在内存中还是在外存。如…
暂无图片
编程学习 ·

30 个纯 HTML5 实现的游戏

作者:Danny Markov 来源:tutorialzin 译者:前端小智浏览器和 JavaScript 的功能逐年不断的变强变大。曾几何时,任何类型的游戏都需要Flash。但随着 HTML5 发展,HTML5 + WebGL 游戏式就慢慢占领着这个舞台。以下是30款流行的游戏,它们可以在所有现代浏览器中运行,并且只使…
暂无图片
编程学习 ·

centos下安装nginx

1,环境介绍 本文安装nginx版本为1.12.2 系统版本为centos6.9 2,软件下载 链接:https://pan.baidu.com/s/1RVhCS1-WcXXaGlnAVQPH-g 提取码:od5x 3,安装nginx 1,编译安装需要安装一些兼容包 yum install pcre-devel openssl-devel gcc-c++ htop iotop iftop nmap nc telnet…
暂无图片
编程学习 ·

ECharts雷达图详细配置说明

// 指定图表的配置项和数据 var option = {backgroundColor: rgba(204,204,204,0.7 ),// 背景色,默认无背景 rgba(51,255,255,0.7)title: {text: 各教育阶段男女人数统计,link: https://www.xxx.com,target: blank,top: 5%,left: 3%,textStyle: {color: #fff,fontSize: 20,…
暂无图片
编程学习 ·

Python——走马灯

走马灯 def f():import times=人生苦短,我学Pythonc=0while True:print(s)time.sleep(0.3)#休眠0.3秒。每隔0.3秒,即300毫秒显示一行代码s=s[1:]+s[0]c+= 1if c==2*len(s):break f()输出结果 人生苦短,我学Python 生苦短,我学Python人 苦短,我学Python人生 短,我学Python…
暂无图片
编程学习 ·

一些个人感觉很不错的特效

html5 canvas绘制3D森林场景拖动特效https://www.mk2048.com/demo/demo_target_desc_h0ccka0cib.html基于canvas 卡通风格的3D森林场景拖动旋转展示特效。video.js在线视频播放器插件点击》video.js在线视频播放器插件html5 video.js mp4视频播放器插件支持点击全屏、播放 spac…
暂无图片
编程学习 ·

CentOS系统安装好之后输入ifconfig指令无法查看ip解决办法

CentOS系统安装好之后输入ifconfig指令无法查看ip解决办法 第一次使用虚拟机安装CentOS系统,安装完之后想要通过Xshell连接Linux系统,在输入ifconfig指令后,无法查看到ip地址,也就无法通过ip地址连接Linux系统 本人经过多次百度,找了很多的解决办法都无法解决问题,但也发现了无…
暂无图片
编程学习 ·

人工智能常用数据预处理

人工智能常用数据预处理一级目录正态化、标准化、归一化、正则化区别和作用 一级目录 1.读数据 2.合并训练和测试 2.填充空白数据 4.改变非数字为数字 5.去除无关数据 6.降为(合并相关数据) 7.正态化数据(碗圆) 正态化、标准化、归一化、正则化区别和作用 1.正态化归一化是…
暂无图片
编程学习 ·

javascript正则表达式写法

var tempPrice=parseFloat($("#ChangePriceValue").val() ) ;var reg = new RegExp(/^\d+$/);if (!reg.test(tempPrice)) {{$("#ChangePriceValue").val("0");window.alert("你还没有填写价格");return;}}
暂无图片
编程学习 ·

datawhale-综合练习题目

这里写自定斜体样式义目录标题这两天考试多,休息的时间也没有,等我考完再重新做回来,等我!功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建…
暂无图片
编程学习 ·

nmon监控工具使用

1、下载nmon监控工具和分析工具,然后把nmon监控工具上传到需要监控的服务器上,建议在/usr/local文件夹下新建一个soft文件夹来存放监控工具,监控工具下载地址https://sourceforge.net/projects/nmon/files/nmon16m_helpsystems.tar.gz/download,然后在soft文件夹下再新建一…
暂无图片
编程学习 ·

Java设计模式-5.适配器设计模式

在使用监听器的时候,需要定义一个类事件监听器接口,通常接口中有多个方法,而程序中不一定都用到,但又必须重写很繁琐,定义监听器时只要继承适配器,然后重写需要的方法。 适配器原理:适配器就是一个类,实现了监听器接口,所有抽象方法都重写了,但是方法都是空的,只重写…
暂无图片
编程学习 ·

Java数据结构--循环链表

一、简介 1.1 概念对于单链表而言,最后一个结点的地址为空,如果表示最后一个结点的指针域指向头结点,整个链表形成一个环,就构成了单循环链表。 与单链表相比,只是将原来判断指针是否为空变为判断是否是头指针,没有其他的变化。 访问单循环链表某一结点,可以从任何一个结…
暂无图片
编程学习 ·

[Java]多线程与并发

文章目录1.进程与线程1.1 进程1.2 进程的状态1.3 线程2.线程的基本使用3.线程休眠4.join与中断线程5.守护线程与yield7.线程同步7.1 多线程共享数据7.2 线程同步7.3 同步准则8.死锁9.生产者与消费者案例10.线程的生命周期11.线程池 1.进程与线程 1.1 进程 程序是指令和数据的有…
暂无图片
编程学习 ·

vue 插件大全

vue 插件大全 Vue是一个构建数据驱动的 web 界面的渐进式框架。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件特别整理了常用的vue插件,来了个大汇总,方便查找使用,便于工作和学习。很全的vue插件汇总,赶紧收藏下吧! 一、UI组件及框架element …