{ "external_effect_before_offset": { "after_replay": { "committed_group_offset": 1, "consumer_position": 1, "external_side_effect_count": 2, "output_high_watermark": 0, "output_last_stable_offset": 0, "read_committed_output": [], "read_uncommitted_output": [], "replicated_committed_log_position": 1, "transaction_state": "none" }, "before_crash": { "committed_group_offset": 0, "consumer_position": 1, "external_side_effect_count": 1, "output_high_watermark": 0, "output_last_stable_offset": 0, "read_committed_output": [], "read_uncommitted_output": [], "replicated_committed_log_position": 1, "transaction_state": "none" }, "duplicate_external_effect": true, "trace": [ "external effect completed once", "process crashed before group offset commit", "restart replayed input-0 and repeated the effect" ] }, "external_effect_outside_transaction": { "after_abort": { "committed_group_offset": 0, "consumer_position": 0, "external_side_effect_count": 1, "output_high_watermark": 1, "output_last_stable_offset": 1, "read_committed_output": [], "read_uncommitted_output": [ "output-0" ], "replicated_committed_log_position": 1, "transaction_state": "aborted" }, "after_replay": { "committed_group_offset": 0, "consumer_position": 1, "external_side_effect_count": 2, "output_high_watermark": 1, "output_last_stable_offset": 1, "read_committed_output": [], "read_uncommitted_output": [ "output-0" ], "replicated_committed_log_position": 1, "transaction_state": "none" }, "before_abort": { "committed_group_offset": 0, "consumer_position": 1, "external_side_effect_count": 1, "output_high_watermark": 1, "output_last_stable_offset": 0, "read_committed_output": [], "read_uncommitted_output": [ "output-0" ], "replicated_committed_log_position": 1, "transaction_state": "ongoing" }, "trace": [ "Kafka output staged and external effect completed", "Kafka transaction aborted; output and offset did not commit", "external system did not roll back; replay repeated its effect" ] }, "kafka_transaction": { "abort_path": { "after": { "committed_group_offset": 0, "consumer_position": 0, "external_side_effect_count": 0, "output_high_watermark": 1, "output_last_stable_offset": 1, "read_committed_output": [], "read_uncommitted_output": [ "aborted-output" ], "replicated_committed_log_position": 1, "transaction_state": "aborted" }, "before": { "committed_group_offset": 0, "consumer_position": 1, "external_side_effect_count": 0, "output_high_watermark": 1, "output_last_stable_offset": 0, "read_committed_output": [], "read_uncommitted_output": [ "aborted-output" ], "replicated_committed_log_position": 1, "transaction_state": "ongoing" } }, "commit_path": { "after": { "committed_group_offset": 1, "consumer_position": 1, "external_side_effect_count": 0, "output_high_watermark": 1, "output_last_stable_offset": 1, "read_committed_output": [ "output-0" ], "read_uncommitted_output": [ "output-0" ], "replicated_committed_log_position": 1, "transaction_state": "committed" }, "before": { "committed_group_offset": 0, "consumer_position": 1, "external_side_effect_count": 0, "output_high_watermark": 1, "output_last_stable_offset": 0, "read_committed_output": [], "read_uncommitted_output": [ "output-0" ], "replicated_committed_log_position": 1, "transaction_state": "ongoing" } } }, "log_committed_offset_not_committed": { "after_replay": { "committed_group_offset": 1, "consumer_position": 1, "external_side_effect_count": 2, "output_high_watermark": 0, "output_last_stable_offset": 0, "read_committed_output": [], "read_uncommitted_output": [], "replicated_committed_log_position": 1, "transaction_state": "none" }, "before_crash": { "committed_group_offset": 0, "consumer_position": 1, "external_side_effect_count": 1, "output_high_watermark": 0, "output_last_stable_offset": 0, "read_committed_output": [], "read_uncommitted_output": [], "replicated_committed_log_position": 1, "transaction_state": "none" }, "trace": [ "input-0 replicated and committed at input offset 0", "consumer processed input-0, but group offset stayed at 0", "restart resumed at offset 0 and repeated the effect" ] }, "model": "deterministic Kafka commit-boundary model", "not_modeled": [ "a real Kafka broker, producer, consumer, coordinator, or network", "ISR election, disk persistence, arbitrary interleavings, or timing", "throughput, latency, security, and version compatibility" ], "offset_before_external_effect": { "after_restart": { "committed_group_offset": 1, "consumer_position": 1, "external_side_effect_count": 0, "output_high_watermark": 0, "output_last_stable_offset": 0, "read_committed_output": [], "read_uncommitted_output": [], "replicated_committed_log_position": 1, "transaction_state": "none" }, "before_crash": { "committed_group_offset": 1, "consumer_position": 1, "external_side_effect_count": 0, "output_high_watermark": 0, "output_last_stable_offset": 0, "read_committed_output": [], "read_uncommitted_output": [], "replicated_committed_log_position": 1, "transaction_state": "none" }, "lost_external_effect": true, "trace": [ "consumer advanced and committed group offset 1", "process crashed before the external effect", "restart resumed at offset 1; input-0 was not replayed" ] } }