关于kafka中的序列化

本文介绍了在Kafka中使用自定义序列化器和Apache Avro进行数据序列化的详细过程。通过自定义序列化器,展示了如何处理复杂对象的序列化,以及为何推荐使用Avro的原因。接着,讲解了Avro的序列化特性,如何处理schema的兼容性,以及在Kafka中配合Schema Registry使用Avro进行数据交换的实践方法。
摘要由CSDN通过智能技术生成

前言

如前面的示例所示,生产者配置包括强制序列化器。 我们已经了解了如何使用默认的String序列化程序。 Kafka还包括integers和ByteArrays的序列化程序,但这并不包括大多数用例。 最终,你将希望能够序列化更多通用格式的记录。
我们将首先展示如何编写自己的序列化程序,然后介绍Avro序列化程序作为推荐的替代方案。

自定义序列化器

当你需要发送给Kafka的对象不是简单的字符串或整数时,你可以选择使用AvroThriftProtobuf等通用序列化库来创建记录,或者为已经使用的对象创建自定义序列化。 我们强烈建议使用通用序列化库。 为了理解序列化程序的工作原理以及为什么使用序列化库是个好主意,让我们看看编写自己的自定义序列化程序需要什么。
假设你不是仅记录客户名称,而是创建一个简单的类来表示客户:

public class Customer {
   
            private int customerID;
            private String customerName;
            public Customer(int ID, String name) {
   
                    this.customerID = ID;
                    this.customerName = name;
}
      public int getID() {
   
        return customerID;
}
      public String getName() {
   
       return customerName;
} }

现在假设我们要为此类创建自定义序列化程序。 它看起来像这样:

import org.apache.kafka.common.errors.SerializationException;
import java.nio.ByteBuffer;
import java.util.Map;
public class CustomerSerializer implements Serializer<Customer> {
   
      @Override
      public void configure(Map configs, boolean isKey) {
   
       // nothing to configure
      }
      @Override
      /**
      We are serializing Customer as:
      4 byte int representing customerId
      4 byte int representing length of customerName in UTF-8 bytes (0 if name is
      Null)
      N bytes representing customerName in UTF-8
      */
      public byte[] serialize(String topic, Customer data) {
   
		try {
   
                      byte[] serializedName;
                      int stringSize;
          if (data == null)
			return null;
		  else {
   
            if (data.getName() != null) {
   
              serializeName = data.getName().getBytes(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值