วิธีการตั้งค่าประเภทเนื้อหา avro บนผู้ผลิต kafka ด้วย spring boot และ spring cloud stream

ฉันกำลังพยายามสร้างตัวอย่างการทำงานกับผู้ผลิตข้อความ avro, kafka และ avro Consumer โดยใช้ spring boot, รีจิสทรีสคีมาสตรีมคลาวด์ของ spring cloud, kafka binder ข้อผิดพลาดต่อไปนี้เกิดขึ้นเมื่อใช้งานข้อความ:

ข้อผิดพลาด 7059 --- [afka-listener-1] os.c.s.b.k.KafkaMessageChannelBinder : ไม่สามารถทำการดีซีเรียลไลซ์ [io.igx.android.Sensor] โดยใช้ contentType [application/x-java-object;type=io.igx.android.Sensor] java .lang.NullPointerException

ฉันมี spring.cloud.stream.bindings.output.contentType=application/+avro บนฝั่งผู้บริโภคและ spring.cloud.stream.bindings.output.contentType=application/+avro บนฝั่งผู้ผลิต

เหตุใดผู้บริโภคจึงไม่เห็นและใช้ประเภทเนื้อหา avro แทน application/x-java-object


person Todor Susnjevic    schedule 09.03.2017    source แหล่งที่มา


คำตอบ (2)


ฉันคิดว่าคุณต้องการเนื้อหาประเภท application/*+avro ที่ฝั่งผู้ผลิต (โปรดสังเกต * นำหน้า) เมื่อตั้งค่าสำหรับผู้ผลิตแล้ว คุณช่วยยืนยันได้ไหมว่าคุณยังคงต้องระบุประเภทเนื้อหาอินพุตสำหรับผู้บริโภคหรือไม่ ฉันคิดว่าผู้บริโภคสามารถอนุมานได้ตามประเภทเนื้อหาที่ผู้ผลิตกำหนด

person Ilayaperumal Gopinathan    schedule 09.03.2017
comment
ตอนนี้ฉันมี spring.cloud.stream.bindings.output.contentType=application/*+avro ที่ฝั่งผู้ผลิตและ spring.cloud.stream.bindings.input.contentType=application/*+avro ที่ฝั่งผู้บริโภค ข้อผิดพลาดเดียวกันยังคง: com.esotericsoftware.kryo.KryoException: java.lang.NullPointerException - person Todor Susnjevic; 09.03.2017
comment
...และหากไม่มีอาร์เรย์ใน avro schema ฉันสามารถใช้ข้อความได้ตามปกติ - person Todor Susnjevic; 09.03.2017
comment
จะเกิดอะไรขึ้นเมื่อคุณตั้งค่าประเภทเนื้อหาเป็น spring.cloud.stream.bindings.output.contentType=avro/bytes - person Ilayaperumal Gopinathan; 09.03.2017

ชื่อช่องผิด ปัญหาคือฉันใช้ spring.cloud.stream.bindings.input.contentType=application/*‌​+avro

แทนสิ่งนี้

spring.cloud.stream.bindings.{ชื่อช่องของฉัน}.contentType=application/*‌​+avro

เมื่อฉันเปลี่ยน {MY CHANNEL NAME} เป็นชื่อที่ฉันใช้เวทย์มนตร์ก็เกิดขึ้น

มันใช้งานได้แม้ว่าฉันจะไม่ได้ระบุประเภทเนื้อหาในฝั่งผู้บริโภคก็ตาม

นอกจากนี้ ฉันจำเป็นต้องระบุ spring.cloud.stream.schemaRegistryClient.endpoint หากไม่ใช่ค่าเริ่มต้น เช่นในกรณีของฉัน ทั้งในด้านผู้ผลิตและผู้บริโภค

person Todor Susnjevic    schedule 09.03.2017