我有以下Kafka用户,如果将group_id
分配为None,它将很好地工作-它接收了所有历史消息和新测试的消息。
consumer = KafkaConsumer(
topic,
bootstrap_servers=bootstrap_servers,
auto_offset_reset=auto_offset_reset,
enable_auto_commit=enable_auto_commit,
group_id=group_id,
value_deserializer=lambda x: json.loads(x.decode('utf-8'))
)
for m in consumer:
但是,如果我将group_id
设置为某个值,它什么也不会收到。我试图运行测试生产者来发送新消息,但什么也没收到。
使用者控制台确实显示以下消息:
2020-11-07 00:56:01 INFO ThreadPoolExecutor-0_0 base.py (Re-)joining group my_group 2020-11-07 00:56:07 INFO ThreadPoolExecutor-0_0 base.py Successfully joined group my_group with generation 497 2020-11-07 00:56:07 INFO ThreadPoolExecutor-0_0 subscription_state.py Updated partition assignment: [] 2020-11-07 00:56:07 INFO ThreadPoolExecutor-0_0 consumer.py Setting newly assigned partitions set() for group my_group
答案 0 :(得分:2)
主题的一个分区只能由同一ConsumerGroup中的一个使用者使用。
如果您未设置group.id,KafkaConsumer将为您生成一个新的随机group.id。由于此group.id是唯一的,您将看到数据正在消耗。
如果您有多个使用同一group.id的使用者,则只有一个使用者将读取数据,而另一个则保持空闲状态而不消耗任何东西。
答案 1 :(得分:0)
我知道,这不是作者问题的解决方案。不过,如果您来到这里,您可能会因为另一个原因而遇到此问题。和我一样。
所以,至少对于 kafka-python v2.0.2 和 Aiven Kafka broker 设置,问题是通过添加消费者.poll() 的干调用解决的。 这特别奇怪,因为当没有分配 group_id 时,这不是必需的。
输出:
columnfiltertext = "bmc";
jQuery.ajax({
url: "https://********.com/wp-content/themes/oceanwp/database-table-data.php",
method: "post",
//data: { "message":$('#input-message').val(),"sender":$('#sender').val(),"receiver":$('#receiver').val()},you can pass the values directly like this or else you can store it in variables and can pass
data: { filtertext: "bmc" }, //"column_filter_number":column_filter_number},
success: function(response){
var len = response.length;
for(var i=0; i<len; i++){
var filter_column_data = response[i].filter_column_data;
//alert(filter_column_data);
console.log(i + ":" + filter_column_data);
}
},
error: function() {
alert('Not OKay');
}
});
});
});
在这种情况下什么都没有
虽然下面按预期工作。它只读取来自上次 commit() 的新消息:
输出:
def get():
for message in consumer:
print(message.value)
consumer.commit()
它按预期输出自上次提交以来该主题中的所有消息
JFYI,类构造函数看起来像这样:
def get():
consumer.poll()
for message in consumer:
print(message.value)
consumer.commit()
¯\_(ツ)_/¯