¿Por qué utilizar Avro con Kafka - Cómo manejar POJOs

adpap:

Tengo una aplicación muelle que es mi productor kafka y me preguntaba por qué Avro es el mejor camino a seguir. Me leer sobre él y todo lo que tiene que ofrecer, pero ¿por qué no puedo simplemente serializar mi POJO que he creado a mí mismo con Jackson, por ejemplo, y enviarlo a Kafka?

Digo esto porque la generación de POJO Avro no es tan sencillo. Por encima de todo, se requiere el plugin de Maven y un archivo .avsc.

Así, por ejemplo, tengo un POJO en mi productor kafka creado a mí mismo usuario llamado:

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;
    }

}

Me serializar y enviarlo a mi tema de usuario en kafka. Entonces tengo un consumidor que en sí tiene un usuario POJO y deserializar el mensaje. ¿Es una cuestión de espacio? Es también no más rápido para serializar y deserializar de esta manera? Por no hablar de que hay una sobrecarga de mantener un esquema-registro.

cricket_007:

No es necesario AVSC, se puede utilizar un archivo AVDL , que básicamente se ve igual que un POJO con sólo los campos

@namespace("com.example.mycode.avro")
protocol ExampleProtocol {
   record User {
     long id;
     string name;
   }
}

Lo cual, cuando se usa el idl-protocolobjetivo de que el plugin de Maven, creará este AVSC para usted, en lugar de escribir que usted mismo.

{
  "type" : "record",
  "name" : "User",
  "namespace" : "com.example.mycode.avro",
  "fields" : [ {
    "name" : "id",
    "type" : "long"
  }, {
    "name" : "name",
    "type" : "string"
  } ]
}

Y también se va a colocar un SpecificDataPOJO User.javaen su ruta de clase para usar en el código.


Si ya tenía un POJO, no es necesario utilizar archivos de AVSC o AVDL. Hay bibliotecas a POJOs convertir. Por ejemplo, se puede utilizar Jackson , que no es sólo para JSON, sólo se necesita para crear una probabilidad JacksonAvroSerializerde Kafka, por ejemplo, o encontrar si es que existe.

Avro también ha incorporado en la biblioteca basada en la reflexión .


Así que a la pregunta - ¿por Avro (por Kafka)?

Así, tener un esquema es una cosa buena . Piense en las tablas RDBMS, puede explicar la mesa, y nos vemos todas las columnas. Mover a las bases de datos NoSQL documento, y pueden contener prácticamente cualquier cosa, y este es el mundo de Kafka JSON.

Supongamos que usted tiene los consumidores en el clúster de Kafka que no tienen idea de lo que es en el tema, tienen que saber exactamente quién / qué se ha producido en un tema. Pueden tratar el consumidor consola, y si se tratara de un texto plano como JSON, entonces se tiene que averiguar algunos campos que les interesa, a continuación, realizar escamosa HashMap similar a .get("name")las operaciones una y otra vez, pero se encontró con una NPE cuando un doesn campo 't existe. Con Avro, que define claramente los valores predeterminados y campos anulables.

Usted no está obligado a utilizar un registro de esquema, pero proporciona a ese tipo de explain topicsemántica para la analogía RDBMS. También le ahorra de tener que enviar el esquema junto con cada mensaje, y el gasto de ancho de banda adicional sobre el tema Kafka. El registro no sólo es útil para Kafka, sin embargo, ya que podría ser utilizado para Spark, Flink, Colmena, etc para todos los análisis de datos Ciencia rodea flujo de datos de ingesta.


Asumiendo que quería usar JSON, a continuación, tratar de usar MsgPack lugar y es probable que vea un aumento en su rendimiento Kafka y ahorrar espacio en disco en los corredores


También puede utilizar otros formatos como Protobuf o Thrift, como se ha comparado Uber

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=184103&siteId=1
Recomendado
Clasificación