When you recover a real-time session, the Integration Service uses the message ID and the commit number in the recovery table to determine whether it committed messages to all targets.
The Integration Service commits messages to all targets if the message ID exists in the recovery table and all targets have the same commit number. During recovery, the Integration Service sends an acknowledgement to the source that it processed the message.
The Integration Service does not commit messages to all targets if the targets have different commit numbers. During recovery, the Integration Service reads the message IDs and the transformation state from the recovery table. It processes messages and writes them to the targets that did not have the message. When the Integration Service reads all messages from the recovery table, it ends the session.
If the session fails before the Integration Service commits messages to all targets and you restart the session in cold start mode, targets can receive duplicate rows.