Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 使用ksqlDB写入现有主题_Apache Kafka_Ksqldb - Fatal编程技术网

Apache kafka 使用ksqlDB写入现有主题

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

我有三个卡夫卡主题: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',否则以值结尾 从苹果那里 发出变化; 失败,因为它尝试为现有主题注册自己的架构:

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)