Kafka 從 0.11 版本開始引入了事務支援。事務可以保證 Kafka 在 Exactly Once 語義的基礎上,生産和消費可以跨分區和會話,要麼全部成功,要麼全部失敗。
為了實作跨分區跨會話的事務,需要引入一個全局唯一的 Transaction ID,并将 Producer獲得的PID 和Transaction ID 綁定。這樣當Producer 重新開機後就可以通過正在進行的 Transaction
ID 獲得原來的 PID。
為了管理 Transaction,Kafka 引入了一個新的元件 Transaction Coordinator。Producer 就是通過和 Transaction Coordinator 互動獲得 Transaction ID 對應的任務狀态。Transaction
Coordinator 還負責将事務所有寫入 Kafka 的一個内部 Topic,這樣即使整個服務重新開機,由于事務狀态得到儲存,進行中的事務狀态可以得到恢複,進而繼續進行。
上述事務機制主要是從 Producer 方面考慮,對于 Consumer 而言,事務的保證就會相對較弱,尤其時無法保證 Commit 的資訊被精确消費。這是由于 Consumer 可以通過 offset 訪
問任意資訊,而且不同的 Segment File 生命周期不同,同一事務的消息可能會出現重新開機後被删除的情況。