Apache kafka 使用ksqlDB写入现有主题
我有三个卡夫卡主题:entity.created、entity.deleted、entity.attribute。它们都有一些实体ID作为消息键和Protobuf消息值 我正在尝试使用ksqlDB聚合前两个主题的消息,并生成到第三个主题的消息: -TODO:这可能只需要一张桌子 创建创建为的表 选择references->basket\u id,count1作为count 从实体_创建 其中type='APPLE' 按引用分组->篮子id 发出变化; 创建表并将其删除为 选择references->basket\u id,count1作为count 从实体_删除 其中type='APPLE' 按引用分组->篮子id 发出变化; 创建任意一个表格 选择apples\u created.basket\u id作为basket\u id,apples\u deleted.count为NULL或apples\u created.count>apples\u deleted.count作为has\u apples 从你创造的苹果 左连接苹果\u已在苹果上删除\u已创建。苹果\u id=苹果\u已删除。苹果\u id 发出变化; 但是,我找不到任何方法将apples_any输出到我的entity.attribute主题。例如: 创建表attr_testing,kafka_topic='entity.attribute'为 选择basket_id,'basket'作为类型,'hasApples'作为名称,大小写为has_apples,然后选择'true',否则以值结尾 从苹果那里 发出变化; 失败,因为它尝试为现有主题注册自己的架构:Apache kafka 使用ksqlDB写入现有主题,apache-kafka,ksqldb,Apache Kafka,Ksqldb,我有三个卡夫卡主题:entity.created、entity.deleted、entity.attribute。它们都有一些实体ID作为消息键和Protobuf消息值 我正在尝试使用ksqlDB聚合前两个主题的消息,并生成到第三个主题的消息: -TODO:这可能只需要一张桌子 创建创建为的表 选择references->basket\u id,count1作为count 从实体_创建 其中type='APPLE' 按引用分组->篮子id 发出变化; 创建表并将其删除为 选择references
Could not register schema for topic: Schema being registered is incompatible with an earlier schema for subject "entity.attribute-value"; error code: 409
我将有多个Kafka生产者写入entity.attribute,并希望ksqlDB只是其中之一。使用ksqlDB是否可以编写现有主题?如果没有,我想我需要一种方法将消息从底层主题复制到entity.attribute。卡夫卡生态系统的首选解决方案是什么
我使用的是ksqldb0.17.0
编辑:
这是entity.attribute主题使用的值架构:
编辑2:
当我尝试创建attr_测试表时,在ksqlDB日志中得到的错误是:
WARN Found incompatible change: Difference{fullPath='#/EntityAttribute', type=MESSAGE_REMOVED} (io.confluent.kafka.schemaregistry.protobuf.ProtobufSchema)
如果我理解正确的话,ksqlDB正在尝试创建一个全新的模式,使用不同的消息名。这让我相信,无论我使用什么模式,ksqlDB都会忽略它。此外,我不知道如何告诉ksqlDB创建枚举字段EntityType而不是字符串。这就是为什么我觉得生成现有主题不是ksqlDB的用例…如果您创建一个新的流作为从另一个流中选择,那么它应该创建另一个主题您的错误并不是说生成根本不可能,而是告诉您所选列与实体的模式不匹配。属性值。。。你介意分享这个模式是什么吗?如果你从另一个流中选择创建一个新的流,那么它应该创建另一个主题。我不想创建另一个主题,我想写一个现有的主题。你的错误并不是说在al[…]上不可能制作是的,如果我指定一个不同的卡夫卡主题并让ksqldb创建它,一切都会正常工作。但是我的目标是产生一个现有的主题。你能展示苹果的模式吗?我认为问题可能在于,当您有AS SELECT basket_id时,它将其视为值的一部分,apples_any的模式是ksqlDB自动创建的。我不认为这是一种价值。事实上,我注意到第一列通常存储在消息键中。但不管细节如何,我的主要问题是:ksqlDB是否可以生成一个现有主题,或者这不是一个用例?如果是的话,我希望有一些链接/文档,因为我自己还没有找到太多。
WARN Found incompatible change: Difference{fullPath='#/EntityAttribute', type=MESSAGE_REMOVED} (io.confluent.kafka.schemaregistry.protobuf.ProtobufSchema)