Comme dit Phil dans les commentaires - topic-partition-offset
devrait être unique, donc je ne vois pas comment cela provoque une perte de données pour vous. Peu importe - vous pouvez laisser le connecteur générer la clé (comme vous le faites), ou vous pouvez définir la clé vous-même (key.ignore=false
). Il n'y a pas d'autre option.
Vous pouvez utiliser Single Message Transformations avec Kafka Connect pour dériver une clé à partir des champs de vos données. Sur la base de votre message dans le forum Elasticsearch, il semble qu'il y ait un id
dans vos données - si cela est unique, vous pouvez le définir comme votre clé, et donc comme votre ID de document Elasticsearch. Voici un exemple de définir une clé avec SMT:
# Add the `id` field as the key using Simple Message Transformations
transforms=InsertKey, ExtractId
# `ValueToKey`: push an object of one of the column fields (`id`) into the key
transforms.InsertKey.type=org.apache.kafka.connect.transforms.ValueToKey
transforms.InsertKey.fields=id
# `ExtractField`: convert key from an object to a plain field
transforms.ExtractId.type=org.apache.kafka.connect.transforms.ExtractField$Key
transforms.ExtractId.field=id
(via https://www.confluent.io/blog/building-real-time-streaming-etl-pipeline-20-minutes/)
Pouvez-vous expliquer votre cas d'utilisation plus? Utilisez-vous le mode analytique ou valeur-clé du connecteur? Le 'topic-partition-offset' devrait être unique pour chaque enregistrement et le connecteur publie à Elastic chaque enregistrement qui vient. Quelles données perdez-vous? Le forum que vous liez ne dit pas ce que vous perdez. – Phil