을 (매직 V1 레코드 헤더를 지원하지 않습니다) 카프카 1.0.0로 전송하지 벌금.봄 카프카 프로듀서 내가 로컬 카프카를 설정이 고정 표시기-작성 설정을 사용하고
o.a.kafka.common.utils.AppInfoParser : Kafka version : 1.0.0
o.a.kafka.common.utils.AppInfoParser : Kafka commitId : aaa7af6d4a11b29d
내가이
kafkaTemplate.send("test-topic", UUID.randomUUID().toString(), "test");
같은 메시지를 보내려고 : 그것은 카프카의 올바른 버전을 인쇄 봄 응용 프로그램을 시작할 때
는 지금은 spring-kafka:2.1.0.RELEASE
를 통해 카프카에 연결을 시도
클라이언트 쪽에서 보내기가 실패합니다.
서버 콘솔에서(3210) 나는 메시지 매직 (V1)가 기록 헤더
Error when handling request {replica_id=-1,max_wait_time=100,min_bytes=1,max_bytes=2147483647,topics=[{topic=test-topic,partitions=[{partition=0,fetch_offset=39,max_bytes=1048576}]}]} (kafka.server.KafkaApis)
java.lang.IllegalArgumentException: Magic v1 does not support record headers
인터넷 검색이 버전 충돌을 암시를 지원하지 않습니다 얻을 수 있지만, 버전 (org.apache.kafka:kafka-clients:1.0.0
이 클래스 경로에) 맞는 것 같다.
실마리가 있습니까? 감사!
편집 : 문제의 원인을 좁혔습니다. 일반 문자열 보내기가 작동하지만 JsonSerializer를 통해 Json을 보내면 주어진 문제가 발생합니다. 여기 내 생산 설정의 내용은 다음과 같습니다
@Value("\${kafka.bootstrap-servers}")
lateinit var bootstrapServers: String
@Bean
fun producerConfigs(): Map<String, Any> =
HashMap<String, Any>().apply {
// list of host:port pairs used for establishing the initial connections to the Kakfa cluster
put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers)
put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer::class.java)
put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer::class.java)
}
@Bean
fun producerFactory(): ProducerFactory<String, MyClass> =
DefaultKafkaProducerFactory(producerConfigs())
@Bean
fun kafkaTemplate(): KafkaTemplate<String, MyClass> =
KafkaTemplate(producerFactory())
그건 의미가 없습니다. (서버 측에서 그 메시지를받는 것). 클라이언트 버전이 오래된 경우 모든 헤더가 전송되지 않으므로 모든 사항이 잘 수행되어야합니다 (예 : 0.10 브로커 1.0.0 클라이언트를 사용하여 테스트했으며 헤더를 보내지 않는 한 작동 함). 1.0.0 클라이언트에서는 템플릿이 헤더를 보내지 않으면 "빈"'RecordHeaders'가 (클라이언트에 의해) 보내집니다. –
이미지 이름이 버전을 지정하지 않은 것으로 보입니다. 따라서 이전 캐시 된 도커 이미지와 최신 클라이언트를 사용할 수 있습니다. 0.10 브로커에 헤더를 보내는 1.0 클라이언트가이 오류가 발생합니다. 도커 이미지 버전을 확인하고 도커가 최신 1.0 브로커 이미지를 가져옵니다. –