
发送消息的三种机制:
1. 忘记并发送:适用于高吞吐量,配合参数acks=0,这样生产者不需要等待服务器的响应,以网络能支持的最大速度发送消息
本质是一种异步,但不会获取返回结果。吞吐量最高
2. 同步发送:适用于顺序发送,设置retries重试时间
知道发送状态,会阻塞,只有当消息通过get返回future对象时,才会继续下一条消息的发送。
future = producer.send(topic="test_topic", key="num", value=i)
# 同步阻塞,通过调用get()方法进而保证一定程序是有序的.
try:
record_metadata = future.get(timeout=10)
except kafka_errors as e:
print(str(e))
3. 异步发送+回调函数:适用于只关心状态,不关心顺序,参数retries=0,并将发送失败的消息记录到日志文件中
在调用send方法发送消息的同时,指定一个回调函数,服务器在返回响应时会调用该回调函数,通过回调函数能够对异常情况进行处理,当调用了回调函数时,只有回调函数执行完毕生产者才会结束,否则一直会阻塞。
producer.send(
topic="test_topic", key="num", value=i
).add_callback(on_send_success).add_errback(on_send_error)
producer.flush()
producer.close()
参考:
https://www.cnblogs.com/FG123/p/10091478.html
https://segmentfault.com/a/1190000020447532
https://blog.youkuaiyun.com/rogerxue12345/article/details/80524804

被折叠的 条评论
为什么被折叠?



