죄송합니다. 문제를 해결하기 전에 약간 설명해야합니다.신뢰할 수있는 메시지 전달
카프카 클라이언트 0.9.0.0을 사용하여 카프카 클러스터에 메시지를 보내고 있습니다. 이 시스템은 일종의 파이프 라인으로, JMS에서 메시지를 소비하여이를 Kafka로 보냅니다. 메시지 신뢰성을 보장하기 위해 JMS 확인 모드가 CLIENT_ACKNOWLEDGE로 설정되어 메시지가 소비되어 성공적으로 처리 될 때 응용 프로그램이 메시지 수신을 확인합니다.
메시지가 소비되면 메시지가 카프카에게 전송되며 이것이 문제의 원인입니다.
비동기 :
내가 비동기 콜백와 함께 보낼 카프카 생산을 사용할 수 있으며, 카프카에 메시지를 전송 오류가있을 경우,이 메시지를 확인하지 않도록 JMS 소비자를 알려 너무 늦을 것 소비. 이를 극복하기 위해 내가 생각해 낸 유일한 것은 예외가있을 경우 콜백의 메시지를 페리스트하고 나중에 메시지를 보내려는 것입니다. 하지만 너무 많은 오버 헤드가 될 것이라고 생각합니다.
비동기 호출을 사용하여이 상황을 처리 할 수있는 다른 방법이 있습니까?
동기 : 카프카에 메시지를 전송하고 수 있지만 어떤 문제가있을 경우
, 동기 호출을 사용 Producer.send()에 의해 반환되는 미래의 get()를 호출, 예외가 발생합니다 나중에 메시지를 확인하지 않고 나중에 다시 시도하도록 JMS 소비자에게 다시보고됩니다.
분명히 성능 저하가있을 것입니다. 이는 차단 호출이 될 것이고, 나쁜 부분은 카프카가 각 메시지를 확인하기 때문에 메시지의 일괄 처리가 없을 것이기 때문입니다.
추가 지속성을 원하지 않기 때문에 나는 동기 호출쪽으로 기울어 져있다.
동기화 호출을 사용할 수 있고 동기 호출의 영향을 최소화 할 수있는 방법이나 구성이 있습니까? 내가 만든 한 가지 구성은 JMS 소비자 풀을 갖는 것입니다.
콜백으로 지속하면 데이터베이스 또는 다른 카프카 주제와 같은 영구 저장소에 메시지를 저장하는 것이 좋습니다. –