1. 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
-
反序列化(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)的数据,这可能很难调试,故建议在第一次编码时稍作考虑;