0

카프카 (Cefka) 주제에서 문자열 키와 null 페이로드가있는 원시 데이터를 사용하는 Spring Cloud Stream Kafka 프로세서 응용 프로그램을 빌드하고 있습니다. String key와 null 페이로드 (Kafka 내의 묘비라고도 함)를 다른 주제로 생성하려고합니다. 메시지에 원시 헤더를 사용하려면 바이트 []를 출력해야하지만, Kafka.INSTANCE를 바이트 []로 인코딩하면 문자 그대로 해시 코드 객체의 문자열이 출력됩니다.원시 헤더가있는 null/tombstone 메시지 게시

바이트 [] 이외의 것을 보내려고하면 원시 헤더를 사용할 수 없습니다.

올바른 방법은 무엇입니까? 페이로드가 null 인 경우 헤더는 어디에 있습니까? 나는 프로듀서에 producer.headerMode = embeddedHeaders를 설정했는데 차이는 보이지 않았지만 해시 코드가 페이로드로 남아 있습니다.

답변

1

당신은 (는 헤더를 건너 뜁니다 점에서 rawheaderMode을 중복)하지만 당신은 네이티브 카프카 시리얼 라이저를 사용할 수 있습니다 후자의 도입 useNativeEncoding 속성을 사용할 수 있습니다.

http://docs.spring.io/autorepo/docs/spring-cloud-stream-docs/Brooklyn.BUILD-SNAPSHOT/reference/htmlsingle/#_producer_properties 또는

+0

http://docs.spring.io/autorepo/docs/spring-cloud-stream-docs/Chelsea.BUILD-SNAPSHOT/reference/htmlsingle/#_producer_properties 아, 오른쪽, 물론, 그래서'KafkaNull' 페이로드는 해당 모드에서 작동을 참조하십시오. 'spring-integration-kafka'는 널 페이로드를 표현하기 위해 "특별한"메시지 페이로드 인'KafkaNull.INSTANCE'를 사용합니다. –

+0

버그가 아니라면 우리는 대처해야한다고 생각합니다. 아마도 핵심 레벨에서 유사한 규칙을 가지고 바인더에서 번역을 할 수 있습니다. –

+0

감사합니다. 나는 내가 생산할 때 KafkaNull.Instance를 사용하고 있습니다. 제작자 시리얼 라이저는 어떻게 오버라이드합니까? 몇 가지 configs를 추가하고 아무것도 스트림 def 및 배포 소품에서 그것을 변경하려면 것 같습니다. 실제로 소비자는 추가 설정 값을 선택했다는 경고를 받았지만 제작자는 bytearray serializer를 사용하도록 설정되었습니다. –