1. Consumer

Consumer
  • 从主题中读取数据的应用程序(集成Kafka客户端)被称为消费者;

  • 消费者可在Kafka中一次从一或多个分区读取数据,
    并在每个分区内按顺序读取数据,但不保证跨分区之间的消息顺序;

  • 消费者从主题(通过名称标识)读取数据:拉取模型(pull model);

  • 拉取模型:即消费者必须向kafka broker请求数据才能获得数据,而非让
    kafka broker不断向消费者推送数据,此实现是为让消费者能控制主题的消费速度;

  • 消费者自动(automatically)知道要从哪个broker读取信息;

  • 若代理发生故障(in case of broker failure),
    消费者知道如何恢复(recover);

  • 每个分区内的数据按偏移量从低到高的顺序读取(read in order),
    且不能向后读取数据(因Kafka和客户端的实现方式);

  • 默认:消费者将只使用首次连接到Kafka后生成的数据,即要读取Kafka中的历史数据,
    必须将其指定为命令的输入(input to command),请参考实践章节;

2. Message Deserializer

ConsumerDeserializer
  • 反序列化(deserialize)是将字节转换为对象/数据(object/data);

  • 用于消息的key和value,常用的反序列化器(deserializer):
    String(包括Json),Int,Float,Avro,Protocol Buffer;

  • 序列化和反序列化类型在主题生命周期内不得更改,而是创建新主题;

  • 若打算切换主题数据格式(format),如从json转换为protobuf,
    则最好创建新主题并迁移应用程序以利用该新主题;

  • serialization/deserialization type must not change
    during topic lifecycle,create new topic instead;

  • 未能正确反序列化可能会导致崩溃(crash)或向下游(downstream)处理应用程序提供
    不一致(inconsistent)的数据,这可能很难调试,故建议在第一次编码时稍作考虑;