在Pulsar中,我编写了一些简单的BASH脚本,使用curl命令创建主题并将其上传到我的名称空间:
function create_partioned_topic {
echo -e "\n+++ Creating partioned topic: $TOPIC +++"
curl --location --request PUT "https://$PULSAR_HOST:$HOST_PULSAR_PORT/admin/v2/persistent/$TENANT/$NAMESPACE/$TOPIC/partitions" \
--verbose \
--header "Authorization: Bearer $AUTHORIZATION" \
--insecure \
--header 'Content-Type: application/json' \
--data-raw '3' 2>&1 | cat | grep "HTTP" # grep -v "Authorization"
}
function uploading_topic {
echo -e "\n\n+++ Uploading $TOPIC +++"
curl --location --request POST "https://$PULSAR_HOST:$HOST_PULSAR_PORT/admin/v2/schemas/$TENANT/$NAMESPACE/$TOPIC/schema" \
--verbose \
--header "Authorization: Bearer $AUTHORIZATION" \
--insecure \
--header 'Content-Type: application/json' \
--data-raw $SCHEMA 2>&1 | cat | grep "HTTP" # grep -v "Authorization"
}
这些命令工作正常,除了以下我尝试上传:
TOPIC=nested_schema
NESTED_SCHEMA='{"schema":"{\"type\":\"record\",\"name\":\"DatasetEventSchema\",\"namespace\":\"channels.$TENANT.$NAMESPACE.$TOPIC.generated\",\"fields\":[{\"name\":\"DataRecord\",\"type\":{\"name\":\"DataRecordSchema\",\"type\":\"record\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"created_by\",\"type\":\"string\"},{\"name\":\"updated_by\",\"type\":\"string\"},{\"name\":\"created_at\",\"type\":\"string\"},{\"name\":\"updated_at\",\"type\":\"string\"},{\"name\":\"data_legitimacy\",\"type\":\"string\"},{\"name\":\"item_status\",\"type\":\"string\"},{\"name\":\"tenant_id\",\"type\":\"string\"},{\"name\":\"tags\",\"type\":\"string\"},{\"name\":\"dataset_series_id\",\"type\":\"string\"},{\"name\":\"location_id\",\"type\":\"string\"},{\"name\":\"provided_by\",\"type\":\"string\"},{\"name\":\"metadata\",\"type\":\"string\"}]}},{\"name\":\"MetadataRecord\",\"type\":{\"name\":\"MetadataRecordSchema\",\"type\":\"record\",\"fields\":[{\"name\":\"timestamp\",\"type\":\"string\"},{\"name\":\"record_type\",\"type\":\"string\"},{\"name\":\"operation\",\"type\":\"string\"},{\"name\":\"partition_key_type\",\"type\":\"string\"},{\"name\":\"schema_name\",\"type\":\"string\"},{\"name\":\"table_name\",\"type\":\"string\"},{\"name\":\"transaction_id\",\"type\":\"string\"}]}}]}","type":"AVRO","properties":{}}'
当我通过curl命令上传这个Schema时,它似乎永远不会完成。我收到它开始发布的通知,但它永远不会完成。
我上传的其他模式也能正常工作。
TOPIC=double_nested_schema
DOUBLE_NESTED_SCHEMA='{"schema":"{\"type\":\"record\",\"name\":\"DoubleNestedSchema\",\"namespace\":\"channels.$TENANT.$NAMESPACE.$TOPIC.generated\",\"fields\":[{\"name\":\"DataRecord\",\"type\":{\"name\":\"DataRecordSchema\",\"type\":\"record\",\"fields\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"IdRecord\",\"type\":{\"name\":\"IdRecordSchema\",\"type\":\"record\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"}]}}]}},{\"name\":\"MetadataRecord\",\"type\":{\"name\":\"MetadataRecordSchema\",\"type\":\"record\",\"fields\":[{\"name\":\"timestamp\",\"type\":\"string\"}]}}]}","type":"AVRO","properties":{}}'
TOPIC=simplest_schema
SIMPLEST_SCHEMA='{"schema":"{\"type\":\"record\",\"name\":\"SimplestExample\",\"namespace\":\"channels.$TENANT.$NAMESPACE.$TOPIC.generated\",\"fields\":[{\"name\":\"name\",\"type\":\"string\"}]}","type":"AVRO","properties":{}}'
我尝试过的事情
- 正如我在上面提到的,我已经尝试了两种不同的模式
SIMPLEST_SCHEMA
和DOUBLE_NESTED_SCHEMA
,它们都运行良好 - 我还测试了在Postman中运行相当于上传我的
NESTED_SCHEMA
的程序,它运行得很好。这是否表明curl中有什么地方不喜欢我的格式?
2条答案
按热度按时间t9eec4r01#
FWIW,在修复了单引号之后,我尝试通过curl在这个site上发送这个有问题的模式,并将内容类型指定为
application/json
。You selected 'application/json' content type, but the provided string is not a valid JSON string.
个基于此,您的JSON似乎是错误的。
kkbh8khc2#
我尝试了许多解决方案,但我一直发现这在Postman中工作得很好,但不是作为curl命令。
当我打开
--verbose
标题时,我看到我在大约这个点上被挂起了:显然,在以下情况下会发生此行为:
通过将
Except
标头设置为空字符串,可以关闭此行为。像这样:
curl -H '期望值:'
这个版本的curl命令最终对我有效:
参见参考文献: