项目需要从Kafka中接收消息,并保存到MySQL数据库中。
最初的程序每接收到一条消息,就将该消息保存到数据库中。
for messagein consumer:
content = json.loads(message.value)
a_record = record_table()
session.add(a_record)
session.commit()
每条消息都会申请一个数据库连接,执行一个事务。面对大量的消息,处理速度太慢,效率太低。
一种可行的解决方法是使用流处理系统批量添加数据到数据库。在流处理系统中,每隔一定时间或每接收到一定量的数据,都会启动处理程序。但我对流处理系统不熟悉,只好借用里面的思想,模拟一个简单的批量程序。
先将消息读入到一个数组中,当数组中数据个数大于某个阈值时,批量将数据添加到数据库中。如下所示
MAX_COMMIT_TO_DB_COUNT = 500
for messagein consumer:
content = json.loads(message.value)
a_record = record_table()
record_object_list.append(a_record)
if len(record_object_list) >= MAX_COMMIT_TO_DB_COUNT:
for a_recordin record_object_list:
session.add(a_record)
session.commit()
record_object_list = []
但