【问题标题】:kafka avro elasticsearch consumer allow unknown keyskafka avro elasticsearch消费者允许未知键
【发布时间】:2019-02-08 20:18:11
【问题描述】:

有没有办法让 Kafka-Avro 接受来自生产者的所有密钥,即使它们没有在生产者模式中定义?目前我正在使用

运行生产者
./bin/kafka-avro-console-producer --broker-list localhost:9092 --topic elasticsearch-sink --property value.schema='{"type":"record","name":"myRecord", "fields":[{"name":"esKey", type":"string"}]}'

然后传入
{"esKey":"keyExample", "undefinedKey": "empty"}

消费者只会显示
{"esKey":"keyExample"}

因此未定义的键也不会发送到 ElasticSearch。 由于输入非常大且不可预测,我宁愿不定义架构。

编辑:使用 Confluent 4.1.1

【问题讨论】:

    标签: elasticsearch apache-kafka avro confluent-platform


    【解决方案1】:

    您的架构不允许其他字段

    "fields":[{"name":"esKey", type":"string"}]
    

    您需要在其中添加undefinedKey 才能显示该字段。基本上,Avro 解串器没有理由认为应该存在其他字段。

    由于输入非常大且不可预测,我宁愿不定义架构。

    不清楚这意味着什么,但如果您有不可预测的数据,那么也许 Avro 或任何严格定义的架构协议不是最佳选择?

    【讨论】:

    • 对,如果我在创建架构时知道 undefinedKey 是什么,那么我可以包含它。我希望有一种方法可以在创建生产者时不包含完整的架构(或任何架构),并允许将所有输入发送到 ElasticSearch。
    • 当然,您可以使用无模式数据(通过普通生产者)并直接发送 JSON。这是您获得异构消息的唯一方法
    • 不在工作 atm 所以我不能重申这一点,但是当使用普通生产者时,数据不会像使用 avro 生产者那样发送到 ElasticSearch。这是正常的还是我错过了什么?感谢帮助
    • 如果您的记录或架构缺少字段,则任何消费者都无法看到这些字段。我不经常使用 Elastic sink,所以我不知道我是否能提供更多帮助
    猜你喜欢
    • 2016-12-09
    • 2019-08-14
    • 2019-08-30
    • 2019-03-24
    • 1970-01-01
    • 2020-05-03
    • 2018-09-22
    • 2021-06-06
    • 2016-05-15
    相关资源
    最近更新 更多