底层支持重连服务器
%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无法得知是否支持