- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
来自 the exactly-once KIP ,关于使用 InitPidRequest
重启应用程序时的生产者幂等性:
2.1 When an TransactionalId is specified If the transactional.id configuration is set, this TransactionalId passed along with the InitPidRequest, and the mapping to the corresponding PID is logged in the transaction log in step 2a. This enables us to return the same PID for the TransactionalId to future instances of the producer, and hence enables recovering or aborting previously incomplete transactions.
In addition to returning the PID, the InitPidRequest performs the following tasks:
Bumps up the epoch of the PID, so that the any previous zombie instance of the producer is fenced off and cannot move forward with its transaction.
Recovers (rolls forward or rolls back) any transaction left incomplete by the previous instance of the producer. The handling of the InitPidRequest is synchronous. Once it returns, the producer can send data and start new transactions.
当生产者失败并再次启动并执行InitPidRequest
时,最后一个事务是“前滚”(我猜这意味着提交)还是“回滚”的情况是什么?这是如何控制的?
最佳答案
使 Kafka 能够实现这一点的关键组件是事务协调器。这是作为您提到的 KIP 的一部分引入的。事务协调器由代理构建,作为初始化过程的一部分,并在内存中维护以下信息:
TransactionalId
到分配的 PID
、当前纪元号(Unix 时间戳)和事务超时值的映射PID
到 PID
指示的生产者当前正在进行的事务状态、参与者主题分区和上次更新此状态的时间的映射现在,回答您关于前滚或后退事务的问题:
当生产者失败并重新启动时,如果生产者带有非空的 TransactionalId
(作为配置参数提供),它会向事务协调器发送一个新的 InitPidRequest
由生产者申请)。
事务协调器收到此请求后会检查在内存映射中是否已经存在具有提供的 TransactionalId
的条目(上面的第 1 点)。如果存在映射,它将在第二个内存映射(上面的第 2 点)中查找 PID
,以检查是否有针对该 PID
的任何正在进行的事务:
BEGIN
,那么事务将被中止(注意:这是回滚版本)PREPARE_ABORT
或 PREPARE_COMMIT
中,那么事务协调器将等待事务完成COMPLETE_ABORT
(回滚 版本)或COMPLETE_COMMIT
(>前滚 版本)。在此之后,事务协调器以最新的 PID
和 TransactionalId
的纪元时间戳作为响应,然后生产者可以开始发送新事务。
我尽量将解释保持在最低限度,但如果您对更多细节感兴趣,那么这里是 detailed design document供大家引用。
希望对您有所帮助!
关于apache-kafka - kafka怎么知道 "roll forward or roll back"是否是一笔交易?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56156749/
以下操作是否完全相同: request.setAttribute(name,"visited"); requestDispatcher.forward(request,response) 和
有两个 header 用于处理请求转发。首先是 X-Forwarded-For第二个是 Forwarded . 我应该使用哪一个? X-Forwarded-For 是事实上的,而 Forwarded
看the documentation for std::forward , template constexpr T&& forward( typename std::remove_reference
给定一个手电筒的nn.Module带有预前钩,例如 import torch import torch.nn as nn class NeoEmbeddings(nn.Embedding):
为了在我的 ASP.NET 应用程序中获取客户端 IP 地址,我使用了 X-Forwarded-For,并从列表中获取第一个 IP 地址(根据我找到的信息,有一个客户端,代理1、代理2..)。但我最近
以下 header 有什么区别? X 转发主机 X 转发服务器 在 Apache 作为代理、Tomcat 作为源服务器的设置中,我在到达 Tomcat 的 HTTP 请求中看到它们。值是(这是我自己的
假设我想要一个通用的高阶函数。最常见的方法是: 一个。通用 lambda auto F1 = [](auto f) { /*...*/ } B.函数模板 template auto F2(F&& f)
为了在我的 ASP.NET 应用程序中获取客户端 IP 地址,我使用了 X-Forwarded-For,并从列表中获取第一个 IP 地址(根据我找到的信息,有一个客户端,代理 1、代理 2 ..)。但
我有一个场景,我想使用 Context.Forward 将上下文转发到另一个对话框,它工作得很好。现在,如果我更新代码以获取对话框堆栈并使用 DialogStack.Forward,则会导致 Stac
我遇到了 std::forward 的两种变体与可变参数模板参数一起使用。 template void foo(Args&&... arga) { bar(std::forward(args
考虑 std::apply 的可能实现: namespace detail { template constexpr decltype(auto) apply_impl(F &&f, Tuple &
我在 Foo Controller 中有一个需要参数的 Action 方法: public function fooAction($one, $two) { $a = one; $b
这些功能是否等效? template void foo(T && t) { bar(std::forward(t)); } template void foo2(T && t) {
在建立从 Fedora 23 到 Centos 7 的 ssh 连接时,我遇到了一个不幸的问题。命令 ssh -X user@centos7和 ssh -Y user@centos7都打印 警告:没有
作为从 Struts 1.x 迁移到 Spring Boot 的一部分,我一直在努力正确转发应有的信息。 最初的 Struts 版本依赖于 web.xml,尽管我想将该项目转换为更新的、完全基于 Ja
我使用了net = cv2.dnn.readNetFromCaffe(protoFile, WeightsFile),然后循环播放实时视频帧以使用net.forward()") bre
我注册了域名 www.a.com 然后我将屏蔽(使用 GoDaddy)流量从 www.a.com 转发到 www.really.long.url.com,因此用户在访问我的网站时只会在地址栏中看到 w
我有一个域,例如 domain.org以及地址为 http://server/node/myname 的服务器上的托管空间. 我如何映射 domain.org至 http://server/node/
我有jsp,具体取决于我正在转发到另一个页面的某些条件。 我有/myjsp/first.jsp 其代码如下, 在这段代码中,if flow come to else 条件控
前向声明和前向引用有什么区别? 在我看来,前向声明是当你声明一个尚未实现的函数时,但这不正确吗?您是否必须查看特定情况以声明案例“前向引用”或“前向声明”? 最佳答案 一个 前向声明是在实现和使用方法
我是一名优秀的程序员,十分优秀!