我应该使用啥:Kafka Stream 或 Kafka 消费者 API 或 Kafka 连接
Posted
技术标签:
【中文标题】我应该使用啥:Kafka Stream 或 Kafka 消费者 API 或 Kafka 连接【英文标题】:What should I use: Kafka Stream or Kafka consumer api or Kafka connect我应该使用什么:Kafka Stream 或 Kafka 消费者 API 或 Kafka 连接 【发布时间】:2018-02-12 10:45:25 【问题描述】:我想知道什么最适合我:Kafka 流、Kafka 消费者 API 还是 Kafka 连接?
我想从主题中读取数据,然后进行一些处理并写入数据库。所以我写了消费者,但我觉得我可以编写 Kafka 流应用程序并使用它的有状态处理器来执行任何更改并将其写入数据库,这可以消除我的消费者代码并且只需要编写数据库代码。
我要插入记录的数据库是: HDFS -(插入原始 JSON) MSSQL - (处理过的 json)
另一个选项是 Kafka 连接,但我发现目前还没有对 hdfs sink 和 jdbc sink 连接器的 json 支持。(我不想用 avro 编写)并且对于复杂的嵌套消息来说,创建模式也很痛苦。
或者我应该编写自定义 Kafka 连接来执行此操作。
所以需要您对我应该编写 Kafka 消费者、Kafka 流还是 Kafka 连接提出意见吗? 什么会在性能方面更好并且开销更少?
【问题讨论】:
【参考方案1】:您可以将它们全部组合使用
我已经尝试过用于 JSON 的 HDFS 接收器,但无法使用
org.apache.kafka.connect.json.JsonConverter
不清楚为什么不。但我假设你忘了设置schemas.enabled=false
。
当我设置
org.apache.kafka.connect.storage.StringConverter
时,它可以工作,但它会以字符串转义格式写入 json 对象。例如。"name":"hello"
写入 hdfs 为"\"name\":\"hello\""
是的,它将对 JSON 进行字符串转义
我要做的处理是基本的验证和少量的字段值转换
Kafka Streams 或 Consumer API 能够进行验证。 Connect 能够进行简单消息转换 (SMT)
一些用例,你需要将数据“复制”到Kafka上;处理您的“原始”主题,使用消费者读取它,然后将其生成回“清理”主题,您可以使用 Kafka Connect 从中写入数据库或文件系统。
【讨论】:
【参考方案2】:欢迎来到堆栈溢出!请采纳https://***.com/tour
请发布带有精确问题的帖子,而不是征求意见 - 这使网站更清晰,意见不是答案(并且取决于每个人的喜好)。询问“如何将 Kafka-connect 与 json 一起使用”- 或者适合这个网站。
另外,请展示一些研究。
更少的开销将是 kafka 消费者 - kafka 流和 kafka 连接使用 kafka 消费者,因此您将始终能够减少开销,但也会失去所有好处(容错、易于使用、支持等)
首先,这取决于您的处理方式。聚合?数数?验证?然后,您可以使用 kafka 流进行处理并将结果以您想要的格式写入新主题。
然后,您可以使用 kafka connect 将数据发送到您的数据库。您不必强制使用 avro,您可以使用其他格式的键/值,请参阅
Kafka Connect HDFS Sink for JSON format using JsonConverter
Kafka Connect not outputting JSON
【讨论】:
我已经为 JSON 尝试过 HDFS 接收器,但无法使用 org.apache.kafka.connect.json.JsonConverter 但是当我 org.apache.kafka. connect.storage.StringConverter 它可以工作,但它以字符串转义格式写入 json 对象。例如。 "name":"hello" 被写入 hdfs 为 "\"name\":\"hello\"" 所以我需要专家来建议我是否应该使用 kafka 消费者或 kafka 流或自定义 kafka 连接编写相同的内容。 我要做的处理是基本的验证和少量的字段值转换。以上是关于我应该使用啥:Kafka Stream 或 Kafka 消费者 API 或 Kafka 连接的主要内容,如果未能解决你的问题,请参考以下文章
解开Kafka神秘的面纱:kafka stream及interceptor
spring-cloud-stream kafka 消费者并发