카프카 (Kafka) 주제에 중복 메시지를 보내지 않으려합니다.카프카 주제에 메시지가 존재하는지 확인하십시오.
달성하기위한 이상적인 방법은 무엇입니까? 아파치 카프카 자바 클라이언트를 사용하여
, 메시지가 KafkaProducer.send
내가 말하는거다을 호출하기 전에 존재하는지 확인하기 위해 어쨌든이이 doc
카프카 (Kafka) 주제에 중복 메시지를 보내지 않으려합니다.카프카 주제에 메시지가 존재하는지 확인하십시오.
달성하기위한 이상적인 방법은 무엇입니까? 아파치 카프카 자바 클라이언트를 사용하여
, 메시지가 KafkaProducer.send
내가 말하는거다을 호출하기 전에 존재하는지 확인하기 위해 어쨌든이이 doc
현재 (Kafka 0.10.1
), Kafka로 작성시 정확히 한 번 배송 할 방법이 없습니다. 어떤 해결 방법을 원한다하더라도 항상 간격이 있으며 메시지가 손실되거나 중복 될 수 있습니다.
그러나 Kafka는 중복 쓰기를 피할 수있는 idempotent producer (0.10.2
예정)을 추가 할 예정입니다. 0.10.2
릴리스의 목표 날짜는 beginning 2017입니다.
당신이 있는지 여부를 확인하는 것은 불가능하다 새 메시지를 보낼 때마다 동일한 메시지가 전달되었습니다. 다시 말해서 성공 또는 실패를 알리는 콜백을 사용하여 KafkaProducer.send 메소드를 호출 할 수 있습니다.
이 방법은 저장되지 않습니다. 성공의 경우에도 제작자의 실패가 성공적인 쓰기 직후에 발생하지만 콜백이 트리거되기 전에는 제작자에게 콜백이 없을 수 있습니다. 이것을 downvote 할 필요가있다. 새로운 대답을 추가 할 것입니다. –
이것은 카프카의 범위에서 벗어납니다. 무작위 액세스를 위해 적절한 색인을 제공하는 다른 저장소를 사용하여이를 수행해야합니다. 필요에 따라 캐시 (분산), 키 - 값 저장소 등이 될 수 있습니다.
다른 소비자가 중복 제거를 위해 다른 전략을 사용할 수 있으며 (일부 소비자는 단순히 중복을 허용 할 수 있음) 생산자가 아닌 소비자 측에서이를 수행하는 것이 좋습니다.
질문은 외부 시스템이 아니라 카프카에 글을 쓰는 것에 관한 것입니다. –
Kafka 주제에서 DB로 데이터를 내보내고 존재 여부를 확인하는 것이 좋습니다. –
소비자와 데이터를 다시 읽는 것만으로 그 존재를 확인할 수 있습니다. 그러나 이것은 매우 비싸고 느립니다. 그러나 지금은 좋은 성능을 제공하는 좋은 솔루션이 없습니다. 멱등 원 Producer를 기다려야합니다. 아시다시피, 중복 쓰기를 허용하고 다운 스트림 소비자를 그에 따라 설계하고 중복 된 것을 필터링하는 것이 좋습니다. –