卡夫卡的消费者减慢

时间:2017-11-01 23:00:40

标签: apache-kafka python-multiprocessing kafka-consumer-api

我使用Kafka维护一个Python服务,该服务应该并行处理以有效处理每条消息的慢速API请求。

我在Python上使用了多处理模块,为消费者使用了kafka-python。

ZooKeeper和Kafka 2.11在同一个Ubuntu服务器上运行,其中大部分是defult配置。

该主题是使用另一个kafka-python生成器自动创建的,并设置为包含10个分区,以便同时使用多达10个消费者。

当我检查时,我发现队列真的很长,所以生产者发送了很多请求:

$ bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092 --topic usrReq --time -1
usrReq:8:1157
usrReq:2:1185
usrReq:5:1167
usrReq:4:1115
usrReq:7:1164
usrReq:10:1150
usrReq:1:1149
usrReq:9:1138
usrReq:3:1186
usrReq:6:1220
usrReq:0:6264

然而;虽然并行工作10个核心,但消费者需要很长时间(在下面的样本日志上117秒)才能从队列中获取下一条消息。

thread 7, consumer: 117.485 sec
api1:0.412 sec
api2:0.752 sec
db_insert:0.132 sec

这是每个进程创建自己的使用者,获取消息并对代码运行分析的方式:

consumer = KafkaConsumer(group_id='my-group', 
                         bootstrap_servers='localhost', 
                         value_deserializer=lambda m: json.loads(m.decode('ascii'))
consumer.subscribe(topics='usrReq')
while True:
    msg = next(consumer).value['id']
    method(msg)

此设置中可能出现问题?

0 个答案:

没有答案