【问题标题】:Kafka streams - First example WordCount doesn't count correctly the first lapKafka 流 - 第一个示例 WordCount 在第一圈计算不正确
【发布时间】:2017-07-29 04:41:57
【问题描述】:

我正在研究 Kafka Streams,我对 Java 8 中 WordCount 的第一个示例有疑问,取自文档。

使用最新可用版本的 kafka 流、Kafka Connect 和 WordCount lambda 表达式示例。

我遵循以下步骤: 我在 Kafka 中创建了一个输入主题和一个输出主题。启动应用流式传输,然后通过插入 .txt 文件中的一些单词来上传输入主题

在第一次计数时,在输出主题中,我看到单词分组正确,但计数错误。如果我尝试重新插入相同的单词,则之前错误计数的连续计数都是正确的。

如果我使用消费者控制台查看输入主题转储,则它已正确加载并且没有脏数据。

怎么第一次算错了?

示例 [第一个数据]: (在Kafka中输入Topic) 嗨嗨 迈克 测试

(应用流式传输正在运行)

(输出主题) hi 12 mike 4 test 3 (casual counts)

[SUCCESSIVE DATA - 在输入主题中发布相同的词]

(输出主题)嗨 14 迈克 6 测试 4

[新尝试]

(输出主题)hi 16 mike 8 test 5

等等……

【问题讨论】:

  • 这听起来很奇怪。你能可靠地重现这个问题吗?这不应该发生。

标签: apache-kafka apache-kafka-streams apache-kafka-connect bigdata


【解决方案1】:

Apache Kafka 中的 WordCount 演示有 the following lines

// setting offset reset to earliest so that we can re-run the demo code with the same pre-loaded data
// Note: To re-run the demo, you need to use the offset reset tool:
// https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Streams+Application+Reset+Tool
props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");

这意味着,当您重新启动应用程序时,它将从一开始(“最早”)读取其输入主题 iff Kafka 中存储的 WordCount 应用程序没有现有的消费者偏移量。应用程序的消费者偏移量在一定量的应用程序不活动后在 Kafka 中过期,默认为 24​​ 小时(参见offsets.retention.minutesbroker configuration)。

我可以想象发生了以下事情:

  • 您之前曾尝试过 Kafka,并在输入主题中输入了测试数据。
  • 然后您休息了 24 小时以上,然后才恢复实验。
  • 现在,当应用重新启动时,会从头开始重新读取输入主题,从而获取较旧的测试输入数据,从而导致“膨胀”计数。

如果我使用消费者控制台查看输入主题转储,则它已正确加载并且没有脏数据。

您可以通过在添加 CLI 选项 --from-beginning 时再次使用控制台使用者查看输入主题来验证我的上述假设(请参阅 https://kafka.apache.org/documentation/#quickstart_consume)。

$ bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic yourInputTopic --from-beginning

这将显示主题“yourInputTopic”中的所有可用数据——减去可能同时从 Kafka 主题中清除的任何数据(默认代理配置将清除超过 7 天的数据,参见.log.retention.hours).

【讨论】:

  • 感谢您的回答。实际上,当我在 24 小时后(然后是新的偏移量)进行测试时,我正在删除旧主题(我启用了取消功能)并从头开始重新创建它们以进行新的干净执行。问题再次浮出水面。但是现在我在示例代码中添加了行 streamsConfiguration.put (ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest") 并且似乎运行良好。也许我还没有完全解决这个问题,但它确实有效。
  • 几周前我遇到了类似的问题,但有时计数为负数。这可能是由类似的原因引起的吗?
  • 负数?这听起来像是其他问题。此处描述的问题只会导致计数夸大(即高于实际应有的计数)。
猜你喜欢
  • 2021-04-30
  • 2011-11-16
  • 1970-01-01
  • 1970-01-01
  • 2016-02-26
  • 1970-01-01
  • 2016-08-05
  • 2018-01-12
  • 1970-01-01
相关资源
最近更新 更多