Apache storm Storm:当批处理tick元组时,为什么要等待确认元组?
在我的拓扑中,我需要为通过它的每个元组执行一个insert语句。为了更好地使用我的数据库,我正在使用tick tuple模式对插入进行批处理 我在网上看到的帖子指示实现以下模式: -批量收集元组 -当勾号出现时(或者当批次增长超过一定大小时)刷新批次 -确认批处理中的所有元组 但是,为什么要等到刷新批处理后才能确认元组?如果刷新批处理时出现异常(如数据库超时/错误),批处理中的所有元组是否最终都会超时并被重放 如果我在批处理之前确认元组,而是根据元组内容批处理某些对象,那么元组将不会被重放。如果刷新我的批处理失败,该批处理将不会在异常时清除,并且下次出现勾号时将尝试再次插入其中的所有消息 如果我在批处理之前确认元组,而是根据元组内容批处理某些对象,那么元组将不会被重放 是的,你确实是对的;这就是为什么只有在批处理成功后才能确认它们。您是否希望所有邮件都能正确处理 但是,为什么要等到刷新批处理后才能确认元组?如果刷新批处理时出现异常(如数据库超时/错误),批处理中的所有元组是否最终都会超时并被重放 是的,元组将在超时时重放。但是,如果批处理失败,则应使其失败(或重试批处理)Apache storm Storm:当批处理tick元组时,为什么要等待确认元组?,apache-storm,Apache Storm,在我的拓扑中,我需要为通过它的每个元组执行一个insert语句。为了更好地使用我的数据库,我正在使用tick tuple模式对插入进行批处理 我在网上看到的帖子指示实现以下模式: -批量收集元组 -当勾号出现时(或者当批次增长超过一定大小时)刷新批次 -确认批处理中的所有元组 但是,为什么要等到刷新批处理后才能确认元组?如果刷新批处理时出现异常(如数据库超时/错误),批处理中的所有元组是否最终都会超时并被重放 如果我在批处理之前确认元组,而是根据元组内容批处理某些对象,那么元组将不会被重放。如果
现在让我再给你一条建议,你不希望元组被重放;这将导致数据源的性能大幅下降,例如,Kafka非常快,因为它执行顺序读取,元组重放使Kafka查找要重放的元组。因此,你应该:
非null约束
,而元组字段为null。在这种情况下,您应该确认该元组,因为您将永远无法在数据库中插入该元组我不能完全理解你的描述。但是,您应该注意以下事项:
- 成功插入事务时,确认批处理的所有元组
- 插入失败时,不确认(稍后再次尝试插入,直到插入成功)