繁体   English   中英

为什么Kafka KTable缺少条目?

[英]Why Kafka KTable is missing entries?

我有一个使用Kafka Streams中的KTable的单实例Java应用程序。 直到最近,当某些消息突然消失时,我仍可以使用KTable检索所有数据。 那里应该有大约33k条带有唯一密钥的消息。

当我想通过密钥检索消息时,我没有收到某些消息。 我使用ReadOnlyKeyValueStore检索消息:

final ReadOnlyKeyValueStore<GenericRecord, GenericRecord> store = ((KafkaStreams)streams).store(storeName, QueryableStoreTypes.keyValueStore());
store.get(key);

这些是我设置为KafkaStreams的配置设置。

final Properties config = new Properties();
config.put(StreamsConfig.APPLICATION_SERVER_CONFIG, serverId);
config.put(StreamsConfig.APPLICATION_ID_CONFIG, applicationId);
config.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
config.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
config.put(AbstractKafkaAvroSerDeConfig.SCHEMA_REGISTRY_URL_CONFIG, schemaRegistryUrl);
config.put(StreamsConfig.KEY_SERDE_CLASS_CONFIG, GenericAvroSerde.class);
config.put(StreamsConfig.VALUE_SERDE_CLASS_CONFIG, GenericAvroSerde.class);
config.put(StreamsConfig.CACHE_MAX_BYTES_BUFFERING_CONFIG, 0);

卡夫卡 :0.10.2.0-cp1
融合 :3.2.0

调查使我得到一些非常令人担忧的见解。 使用REST代理,我手动读取分区,发现某些偏移量返回错误。

请求: /topics/{topic}/partitions/{partition}/messages?offset={offset}

{
    "error_code": 50002,
    "message": "Kafka error: Fetch response contains an error code: 1"
}

没有客户端,java或命令行都没有返回任何错误。 他们只是跳过 有缺陷的 缺少消息会导致KTables中的数据丢失。 一切都很好,没有通知,似乎某些消息已损坏。

我有两个代理,所有主题的复制因子均为2,并且已完全复制。 两家经纪人分别返回相同的收益。 重新启动经纪人没有什么区别。

  • 可能是什么原因?
  • 如何在客户中发现这种情况?

默认情况下,Kafka Broker配置键cleanup.policy设置为delete 将其设置为compact以保留每个键的最新消息。 参见压实

删除旧消息不会更改最小偏移量,因此尝试检索低于此值的消息会导致错误。 错误非常模糊。 Kafka Streams客户端将从最小偏移量开始读取消息,因此没有错误。 唯一可见的效果是KTables中的数据丢失。

当应用程序运行时,由于有了缓存,即使从Kafka本身删除消息后,所有数据仍可能可用。 它们将在清理后消失。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM