从REST api向Kafka提取数据

时间:2018-01-25 11:07:57

标签: rest apache-kafka

我有很多REST API来从不同的数据源提取数据,现在我想将这些休息响应发布到不同的kafka主题。此外,我想确保没有生成重复的数据。 有没有工具可以进行这种操作?

1 个答案:

答案 0 :(得分:3)

因此,一般来说,Kafka处理管道应该能够处理多次发送的消息。 Exactly once delivery of Kafka messages是一个功能,自2017年中期以来一直存在(假设我写的是2018年1月)和Kafka 0.11,所以除非你在Kafka安装中有超级流血的优势,否则你的管道应该能够处理同一消息的多次交付。

那当然是你的管道。现在您遇到的问题是,您的数据源可能会多次向您发送消息,而您的HTTP - > Kafka微服务。

理论上,您应该将管道设计为幂等的:同一更改消息的多个应用程序应该只影响一次数据。当然,这说起来容易做起来难。但是,如果你管理这个,那么“问题就解决了”:只需发送重复的消息,无论什么都无关紧要。这可能是最好的事情,无论一次只交付CAP定理弯曲魔法KIP-98做什么。 (如果你不明白为什么这个超级魔法在这里是一个家庭作业话题:))

假设您的输入数据是关于用户的帖子。如果您发布的数据包含某种updated_at日期,则可以创建事务日志Kafka主题。将密钥设置为用户ID,将值设置为应用于该用户的所有(例如)updated_at字段。当您处理HTTP Post时,在本地KTable中查找该主题的用户,检查您的帖子是否已被记录。如果已经记录,那么不要对Kafka进行更改。

即使没有updated_at字段,您也可以将用户文档保存在KTable中。如果Kafka是一个事务日志数据流(内部数据库),那么KTables就是右侧的数据流:数据库了。如果KTable中的当前值(所有应用更改的累积)与您在帖子中给出的对象相匹配,那么您已经应用了更改。