- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 spring 应用程序,它是我的 kafka 生产者,我想知道为什么 avro 是最好的选择。我阅读了它及其提供的所有内容,但为什么我不能序列化我自己用 jackson 创建的 POJO 并将其发送到 kafka?
我这么说是因为 avro 生成的 POJO 并不是那么直接。最重要的是,它需要 maven 插件和一个 .avsc 文件。
例如,我在自己创建的 kafka 生产者上有一个名为 User 的 POJO:
public class User {
private long userId;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getUserId() {
return userId;
}
public void setUserId(long userId) {
this.userId = userId;
}
}
我将其序列化并发送到我在 kafka 中的用户主题。然后我有一个消费者本身有一个 POJO 用户并反序列化消息。是空间的问题吗?这样序列化和反序列化不是也更快吗?更不用说维护架构注册表的开销。
最佳答案
您不需要 AVSC,you can use an AVDL file ,它基本上看起来与只有字段的 POJO 相同
@namespace("com.example.mycode.avro")
protocol ExampleProtocol {
record User {
long id;
string name;
}
}
当使用 Maven 插件的 idl-protocol
目标时,将为您创建此 AVSC,而不是您自己编写。
{
"type" : "record",
"name" : "User",
"namespace" : "com.example.mycode.avro",
"fields" : [ {
"name" : "id",
"type" : "long"
}, {
"name" : "name",
"type" : "string"
} ]
}
它还会在您的类路径中放置一个 SpecificData
POJO User.java
以便在您的代码中使用。
如果您已有 POJO,则无需使用 AVSC 或 AVDL 文件。有一些库可以转换 POJO。比如你can use Jackson ,这不仅适用于 JSON,例如,您可能只需要为 Kafka 创建一个 JacksonAvroSerializer
,或者查找是否存在。
Avro 也有 built-in library based on reflection .
Confluent Schema Registry 序列化程序具有使用基于反射的模型的设置。
那么问题来了 - 为什么选择 Avro(针对 Kafka)?
好吧,拥有架构是一件好事。想想 RDBMS 表,你可以解释这个表,然后你会看到所有的列。转向 NoSQL 文档数据库,它们几乎可以包含任何内容,这就是 Kafka 的 JSON 世界。
假设您的 Kafka 集群中有消费者不知道主题中有什么,他们必须确切地知道主题中产生了谁/什么。他们可以尝试控制台消费者,如果它是像 JSON 这样的明文,那么他们必须找出他们感兴趣的一些字段,然后执行类似 HashMap 的 flaky .get("name")
操作一次又一次,只有在字段不存在时才会遇到 NPE。使用 Avro,您可以清楚地定义默认值和可为空的字段。
您不是必需使用架构注册表,但它为 RDBMS 类比提供了那种类型的explain topic
语义。它还使您无需将模式与每条消息一起发送,以及 Kafka 主题的额外带宽费用。不过,注册表不仅对 Kafka 有用,因为它还可以用于 Spark、Flink、Hive 等围绕流数据摄取的所有数据科学分析。
假设您确实想使用 JSON,那么 try using MsgPack instead并且您可能会看到 Kafka 吞吐量增加并节省代理上的磁盘空间
您还可以使用其他格式,例如 Protobuf 或 Thrift,as Uber has compared
关于java - 为什么将 Avro 与 Kafka 一起使用 - 如何处理 POJO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54195813/
我刚刚发现了 Camel,它似乎正是我所需要的。 我有几个知道如何处理特定输入数据的构建 block ,所以我想创建一个非常简单的 GUI 供用户选择构建 block ,只需将它们一个接一个地链接起来
根据Convert Spark DataFrame to Pojo Object的回复我了解到 Dataframe是 Dataset 的别名. 我目前计算了 JavaPairRDD哪里CityStat
我使用的是jackson,场景是: 在客户端 (Android) 中生成对 Web 服务的 URL 调用 Web 服务以 json 形式返回“complex pojo”(具有与其他 pojo 相同的类
我需要将文档存储到 Elasticsearch 索引中,因此我定义了一个映射。我需要从我的 java 客户端向它提供看起来像 Compony 类的 pojo。它有很多重复的值。我可以使用对象组合模式来
所以我正在开发一个聊天应用程序。有一部分我感兴趣的是一次从数据库中检索 3 个实体。有一个 serverDto 实体和 accountDto 实体。每个服务器都有很多账户,账户里有一个字段叫做acti
我有一个 Java 中的 POJO 列表,我需要将其转换为另一种类型的 POJO 列表。两个 POJO 都有两个字符串字段。除了迭代原始列表并将新项目添加到结果列表之外,是否有更好的方法来执行此操作?
我正在开发一个 API 来访问存储在系统中的数据。该系统包含人员、约会和与这些约会相关的程序等内容。我的应用程序将严格为只读。 我正在使用带 RowMapper 的 Spring 来构建对象,例如“P
希望有人能帮助我。我有一个具有以下结构的 POJO: public class Invoice{ private String docNum; private String customer; pri
引用以下链接,我在运行时创建了类,http://blog.javaforge.net/post/31913732423/howto-create-java-pojo-at-runtime-with-j
所以我遇到了这个教程,将 POJO 序列化为 json,然后将 json 文件反序列化回 POJO。 http://www.mkyong.com/java/how-to-convert-java-ob
我是 Java 的新手。我只是对序列化和反序列化感到困惑。所以,我很困惑我应该使用哪一个。 我正在寻找一个回合,发现 Boon、Jackson、GSON(我目前正在使用 GSON,但一些文章使用 Ja
我确信这个问题可能已经被问过几次了,但我不明白我应该使用什么查询。我想要做的是,将 POJO 传递给另一个参数可以是动态的 POJO 像下面的例子 Class DataPOJO{ privat
我有一个有多页的注册表。所以,我将一页映射到一个 pojo。最后,当我处理数据库时,我想将其作为单个 pojo 提交。任何简化此模型的想法。 谢谢:) 最佳答案 您可以创建一个包装器 POJO,它在主
希望有人能帮助我。我有一个具有以下结构的 POJO: public class Invoice{ private String docNum; private String customer; pri
要求: 将 json 文件中选定的字段收集到 POJO 中(字段名称不匹配) 更新 POJO 的其他非映射字段 转换回带有 POJO 字段名的 jsonNode 问题:步骤 1 和 2 没问题。当将
我的 Spring Boot 应用程序中有两个 Pojo Pojo 1:FeedData 代码(我有获取和设置,只是没有在这里显示): package com.cms.tb.model; import
我们有两个 Pojo 文件。 Person { String name; int age; String address; String phoneNo; boolean isMa
我有一个数据库调用,如果没有任何条件匹配,则可能返回 null。如果有记录匹配,则结果是一个包含嵌入对象列表的 Pojo。我想将该 Pojo 转换为其嵌入对象 id 的列表。 Foo.class 有
我正在尝试使用流将 pojo 映射到 pojo 上的属性公开的一组项目。我意识到这还不清楚,所以我将展示我是如何在没有流的情况下完成的。 我有产品类别的枚举,产品的枚举和具有此类产品的商店列表 pub
我们在 Apache2 网络服务器后面的 Tomcat 6 中运行的 AXIS2 v1.5.2 中实现了一个 POJO 网络服务。 出于演示目的,我将重点介绍 validateUser 消息和相应的方
我是一名优秀的程序员,十分优秀!