apache-kafka - 由于代理关闭,流的更改日志和重新分区分区的子集不可用 - 流应该如何表现?
问题描述
我的设置包括 3 个 kafka 代理(2.11-1.1.1)、一个 ZK 和一个使用 Streams API 的 java 服务。
Java 服务从主题 A 消费,执行持久流操作(由更改日志和重新分区流主题备份)并写入主题 B。启用 EOS 语义。
鉴于更改日志和重新分区主题的复制因子为 1,如果我的一个代理关闭(例如,在我的 DEV 环境中,只有一个代理的磁盘已满),流 java 应用程序应该如何表现。即使无法访问 1/3 的更改日志和重新分区分区,流是否会继续消耗?
编辑:还考虑到主题 A、B 和 __consumer_offsets 的 RF=3。
在我的 java 服务日志中,我看到:
2019-01-04 09:14:38,787 UTC WARN kafka-producer-network-thread | trsb-app-
nonprod.snapshot-14fa12b2-ac15-4ecc-8729-8f6c4a0034a7-StreamThread-2-0_4-
producer org.apache.kafka.clients.NetworkClient warn | [Producer
clientId=trsb-app-nonprod.snapshot-14fa12b2-ac15-4ecc-8729-8f6c4a0034a7-
StreamThread-2-0_4-producer, transactionalId=trsb-app-nonprod.snapshot-0_4]
Connection to node 1 could not be established. Broker may not be available.
2019-01-04 09:14:38,797 UTC WARN kafka-producer-network-thread | trsb-app-
nonprod.snapshot-14fa12b2-ac15-4ecc-8729-8f6c4a0034a7-StreamThread-2-1_10-
producer org.apache.kafka.clients.NetworkClient warn | [Producer
clientId=trsb-app-nonprod.snapshot-14fa12b2-ac15-4ecc-8729-8f6c4a0034a7-
StreamThread-2-1_10-producer, transactionalId=trsb-app-nonprod.snapshot-
1_10] Connection to node 1 could not be established. Broker may not be
available.
并且没有消耗任何东西。
在两个工作代理日志中,我看到:
[2019-01-04 13:56:56,449] WARN Resetting first dirty offset of trsb-app-
nonprod.snapshot-store.invoices-changelog-43 to log start offset 99 since
the checkpointed offset 95 is invalid. (kafka.log.LogCleanerManager$)
[2019-01-04 13:56:56,449] WARN Resetting first dirty offset of trsb-app-
nonprod.snapshot-store.invoices-changelog-40 to log start offset 103 since
the checkpointed offset 100 is invalid. (kafka.log.LogCleanerManager$)
解决方案
由于您只使用一次语义,因此至少需要 3 个代理才能继续处理,因此如果其中一个代理出现故障,您的应用程序将不会继续处理。阅读此处(请参阅 processing.guarantee 部分)以获取有关此的更多信息:
https://kafka.apache.org/10/documentation/streams/developer-guide/config-streams.html#id25
推荐阅读
- cmake - ctest 错误“未找到测试”究竟是什么意思?
- python - 如何一次向python数据表框架添加一行?
- java - 在用户退出应用程序之前找到最后一个 onBackPressed
- ssis - 如何在 SSMS 中将 PackagePassword 传递给 SSIS 包的执行
- python - Python for loop TRUE 或 FALSE 停止处理
- php - 如何更改 phpspreadsheet html 阅读器中的列属性
- google-bigquery - 错误:GoogleJsonResponseException:对 bigquery.jobs.get 的 API 调用失败并出现错误:未找到:作业 YXZ
- python - Quandl For Loop NotFoundError Python
- reactjs - REACT NATIVE - 如何根据最长的文本对齐列表中的项目?
- swift - 通过tableview单元格中的按钮将图像导入imageview