Я только новичок в Kafka и немного узнал об идемпотентности производителя kafka.
Насколько я понимаю, когда производитель отправляет сообщение брокеру, и брокеру необходимо отправить обратно ACK производителю, чтобы сообщить ему, что сообщение было получено. Если ACK не был получен производителем по какой-либо причине, он должен снова отправить то же сообщение брокеру, чтобы сообщение было продублировано. И идемпотентный производитель может устранить эту проблему.
По сути, каждому производителю будет назначен PID, и каждому сообщению будет присвоен серийный номер. Таким образом, PID + серийный номер может идентифицировать сообщение. Так работает идепотенция кафки.
Если я прав, предположим, что я создаю три раздела для одной темы, и производитель отправляет сообщения в три раздела с помощью алгоритма циклического перебора, что означает, что три раздела будут получать сообщения одно за другим. Может ли Кафка в таком случае гарантировать идемпотентность?
Например, есть три раздела a, b и c.
В какой-то момент производитель отправляет сообщение X в раздел a, a успешно получает X, но не может отправить обратно ACK. Итак, производитель повторно отправил сообщение X. Теперь у меня есть два вопроса:
- Это будет раздел a или раздел b, который получит последнее сообщение X?
- Если это раздел b, означает ли это, что раздел a и раздел b будут иметь одно и то же сообщение X, что означает, что Кафка не может гарантировать идемпотентность в этом случае?