部分数据从事件中心提取到 Azure 数据资源管理器
Partial Data Being Ingested To Azure Data Explorer From Event Hub
我目前有一个 Azure 数据资源管理器设置来从事件中心获取数据。出于某种我不知道的原因,我的摄取 table 只看到了大约 45% 的事件。我通过一次将 100 个事件单独发送到事件中心来对此进行测试。我知道我的事件中心正在接收这些事件,因为我设置了 SQL table 来接收这些事件,并且 table 正在接收其中的 100%(在单独的消费者组下)。我的假设是我错误地设置了 Azure 数据资源管理器 table。
我要发送一个非常基本的对象
public class TestDocument
{
[JsonProperty("DocumentId")]
public string DocumentId { get; set; }
[JsonProperty("Title")]
public string Title { get; set; }
{
我已在 Azure 中启用流式摄取
Azure Data Explorer > Configurations > Streaming ingestion (ON)
我在 table
中启用了流式摄取
.alter table TestTable policy streamingingestion enable
我的Table映射如下
.alter table TestTable ingestion json mapping "TestTable_mapping" '[{"column":"DocumentId","datatype":"string","Path":"$[\'DocumentId\']"},{"column":"Title","datatype":"string","Path":"$[\'Title\']"}]'
我的数据连接设置
Consumer group: Its own group
Event system properties: 0
Table name: TestTable
Data format: JSON
Mapping name: TestTable_mapping
这里有我遗漏的东西吗?一贯地,在发送的 100 个事件中,我只看到大约 45-48 个被摄入我的 table。
编辑:
Json TestDocument
的负载
{"DocumentId":"10","Title":"TEST"}
发现发生了什么,我正在向我的序列化对象添加 BOM,看起来 ADX 有问题。当我尝试在没有 BOM 的情况下序列化我的对象时,我能够看到从事件中心到 ADX 的所有数据流。
这是我如何做的示例:
private static readonly JsonSerializer Serializer;
static SerializationHelper()
{
Serializer = JsonSerializer.Create(SerializationSettings);
}
public static void Serialize(Stream stream, object toSerialize)
{
using var streamWriter = new StreamWriter(stream, Encoding.UTF8, DefaultStreamBufferSize, true);
using var jsonWriter = new JsonTextWriter(streamWriter);
Serializer.Serialize(jsonWriter, toSerialize);
}
修复了什么:
public static void Serialize(Stream stream, object toSerialize)
{
using var streamWriter = new StreamWriter(stream, new UTF8Encoding(false), DefaultStreamBufferSize, true);
using var jsonWriter = new JsonTextWriter(streamWriter);
Serializer.Serialize(jsonWriter, toSerialize);
}
我目前有一个 Azure 数据资源管理器设置来从事件中心获取数据。出于某种我不知道的原因,我的摄取 table 只看到了大约 45% 的事件。我通过一次将 100 个事件单独发送到事件中心来对此进行测试。我知道我的事件中心正在接收这些事件,因为我设置了 SQL table 来接收这些事件,并且 table 正在接收其中的 100%(在单独的消费者组下)。我的假设是我错误地设置了 Azure 数据资源管理器 table。
我要发送一个非常基本的对象
public class TestDocument
{
[JsonProperty("DocumentId")]
public string DocumentId { get; set; }
[JsonProperty("Title")]
public string Title { get; set; }
{
我已在 Azure 中启用流式摄取
Azure Data Explorer > Configurations > Streaming ingestion (ON)
我在 table
中启用了流式摄取.alter table TestTable policy streamingingestion enable
我的Table映射如下
.alter table TestTable ingestion json mapping "TestTable_mapping" '[{"column":"DocumentId","datatype":"string","Path":"$[\'DocumentId\']"},{"column":"Title","datatype":"string","Path":"$[\'Title\']"}]'
我的数据连接设置
Consumer group: Its own group
Event system properties: 0
Table name: TestTable
Data format: JSON
Mapping name: TestTable_mapping
这里有我遗漏的东西吗?一贯地,在发送的 100 个事件中,我只看到大约 45-48 个被摄入我的 table。
编辑:
Json TestDocument
的负载{"DocumentId":"10","Title":"TEST"}
发现发生了什么,我正在向我的序列化对象添加 BOM,看起来 ADX 有问题。当我尝试在没有 BOM 的情况下序列化我的对象时,我能够看到从事件中心到 ADX 的所有数据流。
这是我如何做的示例:
private static readonly JsonSerializer Serializer;
static SerializationHelper()
{
Serializer = JsonSerializer.Create(SerializationSettings);
}
public static void Serialize(Stream stream, object toSerialize)
{
using var streamWriter = new StreamWriter(stream, Encoding.UTF8, DefaultStreamBufferSize, true);
using var jsonWriter = new JsonTextWriter(streamWriter);
Serializer.Serialize(jsonWriter, toSerialize);
}
修复了什么:
public static void Serialize(Stream stream, object toSerialize)
{
using var streamWriter = new StreamWriter(stream, new UTF8Encoding(false), DefaultStreamBufferSize, true);
using var jsonWriter = new JsonTextWriter(streamWriter);
Serializer.Serialize(jsonWriter, toSerialize);
}