Различный key.serializer для производителя при использовании транзакций - PullRequest
0 голосов
/ 18 июня 2019

Я использую spring-cloud-stream-kafka и не понимаю, как можно изменить свойство key.serializer при использовании транзакций.Это моя конфигурация:

spring:
  cloud:
    stream:
      bindings:
        accountSource:
          contentType: application/*+avro
          destination: account
      kafka:
        binder:
          brokers: ${KAFKA_BOOTSTRAP_ADDRESSES}
          transaction:
            transaction-id-prefix: tx-
            producer:
              configuration:
                retries: 1
                acks: all                
        bindings:
          accountSource:
            producer:
              configuration:
                key.serializer: org.apache.kafka.common.serialization.StringSerializer # Ignored!
      schema:
        avro:
          subjectNamingStrategy: com.example.CustomSubjectNamingStrategy
      schemaRegistryClient:
        endpoint: ${KAFKA_SCHEMA_REGISTRY_URL}

Я прочитал здесь , что при настройке свойств транзакции на уровне связывателя, все другие специфические свойства производителя привязки.Означает ли это, что все производители в приложениях должны использовать один и тот же key.serializer?Это кажется мне очень ограничительным.

1 Ответ

1 голос
/ 18 июня 2019

Проблема в том, что транзакция должна быть запущена привязкой потребителя (чтобы она могла отправить смещение транзакции и зафиксировать или откатить после успеха / неудачи).

Если существует несколько привязок производителей, то привязка потребителя не имеет представления, в какое приложение отправлять данные, поэтому нам нужно использовать одного глобального производителя.

Одним из решений было бы написать настраиваемый делегирующий сериализатор и установить заголовок в выходном сообщении, чтобы сообщить сериализатору, какой делегат сериализатор вызывать.

...