底层支持重连服务器

%3|1600150057.893|ERROR|rdkafka#consumer-1| [thrd:192.168.58.95:9092/bootstrap]: 192.168.58.95:9092/0: Connect to ipv4#192.168.58.95:9092 failed: 由于目标计算机积极拒绝,无法连接

当服务器恢复正常,能够正常重连


必须指定一个groupid,可以是任意的一串字符串

 /* Consumer groups require a group id */

 if (!group)

  group = "rdkafka_consumer_example";

topic到group质检是发布订阅的通信方式,即一条topic会被所有的group消费,属于一对多模式;group到consumer是点对点通信方式,属于一对一模式。

举例: 

不使用group的话,启动10个consumer消费一个topic,这10个consumer都能得到topic的所有数据,相当于这个topic中的任一条消息被消费10次。

使用group的话,连接时带上groupid,topic的消息会分发到10个consumer上,每条消息只被消费1次。


rd_kafka_consumer_poll会返回超时信息或者发送数据

  /** Reached the end of the topic+partition queue on

         * the broker. Not really an error. */

        RD_KAFKA_RESP_ERR__PARTITION_EOF = -191,//目前没有数据

        RD_KAFKA_RESP_ERR__TIMED_OUT = -185,//操作超时

-191是超时信息


Local: Message timed out

怀疑是发送的报文较长(图片的base64编码字符) 最终定位到是服务器连接不上的问题


auto.offset.reset该属性定义了消费者从主题的哪个时刻开始消费

smallest:消费最早的消息

largest:从消费者连上主题这一刻时间开始消费,之前的消息不会消费

注意:Java版本中的这个字段的属性值分别是earliest和latest


kafka服务器默认支持报文长度是10k,如果发送大图片会出错

发送图片缓存,返回错误Broker: Message size too large

对应错误的返回码:RD_KAFKA_RESP_ERR_MSG_SIZE_TOO_LARGE


librdkafka和Broker版本兼容

摘自:https://github.com/edenhill/librdkafka/wiki/Broker-version-compatibility

自从发布了0.8.0.0.0版本之后,librdkafka支持所有的发布版本的Apache Kafka broker,但不是所有的语法属性都能被broker接受,因为
一些语法特性依赖于broker的具体实现

当前的默认配置:
api.version.request=true
broker.version.fallback=0.9.0.0
api.version.fallback.ms=0 (never revert to broker.version.fallback)

根据现场使用的broker版本,对librdkafka进行具体的配置

Broker version >= 0.10.0.0 (or trunk)
对于 librdkafka >= v1.0.0 不再需要配置api.version相关参数
对于 librdkafka < v1.0.0需要指定配置如下:
api.version.request=true
api.version.fallback.ms=0

Broker versions 0.9.0.x

api.version.request=false
broker.version.fallback=0.9.0.x  (the exact 0.9.0.. version you are using)

Broker versions 0.8.x.y
api.version.request=false
broker.version.fallback=0.8.x.y  (your exact 0.8... broker version)

详情描述
Apache Kafka 在0.10.0.0版本支持KIP-35(提供API函数查询要求的类型和支持的版本),
(允许客户端查询哪些操作合法),对于旧版本的broker无法得知是否支持