部分数据从事件中心提取到 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);
}