注:此文并非官方文档的翻译
kafka的producer默认是异步的方式,在大数据量的情况下可能会出现丢失数据的情况.但是同步的方式又比较低效,因此合理设置异步producer下的kafka参数既可以提高效率又可以不丢失数据.只是要对各参数有一个比较深入的了解.下面是我总结的对于处理安全外几乎所有producer参数的理解:
以python客户端为例子,java的参数名可能稍有不同但是含义是一样的
例子:
producer = KafkaProducer(bootstrap_servers='xxx1:9092,xxx2:9092',
acks=1,retries =3,
batch_size=524288,
reconnect_backoff_max_ms=3000,
buffer_memory=536870912
)
// producer默认是异步的
f = producer.send("topic_name","hello")
//f.get(timeout=3) 如果加了get就变成了同步,也就是说要等待get到服务端返回的结果后再往下执行
bootstrap_servers
格式为host[:port]例如localhost:9092,是kafka连接的broker地址列表,可以是多台,用逗号分隔
client_id (str)
客户端名称,用来追查日志的,默认是kafka-python-producer-# (#是个唯一编号)
key_serializer (callable)
key序列化函数. 默认值: None.
value_serializer (callable)
值序列化函数默认值: None.