Kafka总结——KafkaProducer

    我司使用kafka版本为1.1.0,主要有两个使用场景:其一,消息通信;其二,与spark streaming集成使用。本文用来记录笔者对kafka producer的使用、理解。

Producer主要工作过程

1、 将消息包装成ProducerRecord对象
2、 对ProducerRecord对象进行序列化
3、 Interceptor(该步骤暂时没有使用场景)
4、 通过partitioner,选择producerrecord发往的分区
5、 准备发往kafka broker
6、 等待broker的响应

Producer主要参数

配置项说明
Buffer.memory默认32m
Buffer.size默认16k
Linger.ms默认0
Acks默认值1
Compression.type默认值none
Max.request.size默认1M
Max.block.ms默认60s
  1. Buffer.memory,用来指定Kafka Producer实例使用的缓存空间大小。
  2. Buffer.size和linger.ms,这两个参数决定何时真正把message发送到kafka broker。当内存中存在的message条数超过buffer.size,或者延迟了linger.ms,便会将缓冲空间中的消息发出去。
  3. Acks,消息发出去,broker何时会返回一个发送成功的响应。默认值为1,即只需要该topic partition 的leader收到该消息,并持久化成功即可。我司一般都使用该默认值。
  4. Compression.type,对消息进行压缩,可以减少网络传输消耗,但是会增加cpu的消耗。另外如何此处设置的compression.type和broker server.properties中配置的压缩方式不一样,那broker会先进行解压缩,再用server端配置的压缩方式再次压缩。
  5. Max.request.size,限制单条消息的最大值
  6. Max.block.ms,当buffer.memory已满(即producer往缓存发送的速度已经远大于往broker发送线程的速度),会让发送线程阻塞一段时间,该时间就由此参数决定,默认60s。

其它

    平时使用时,Message内容全部放在value部分,key为null,so,producer使用轮询方式去发送消息。
    虽然Kafka producer是线程安全的;但在多线程情况下,我还是采用一个线程一个Producer的方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Python中使用Kafka模块,可以按照以下步骤进行操作: 1. 安装kafka-python模块:可以使用pip install kafka-python来安装kafka-python模块,这是一个与Python兼容的Kafka客户端库。 2. 引入KafkaProducer:在Python代码中,要使用KafkaProducer,可以通过以下方式引入:from kafka import KafkaProducer。 请注意,如果您使用的是Python 3.6以上的版本,可能会遇到SyntaxError: invalid syntax报错。这是因为kafka模块不支持Python 3.6以上的版本。解决此问题的方法是安装kafka-python模块,可以使用pip install kafka-python命令进行安装。安装成功后,就可以使用from kafka import KafkaProducer引入KafkaProducer了 [2。 接下来,您可以根据自己的需求使用KafkaProducer进行生产者操作。例如,可以使用KafkaProducer发送JSON数据,可以按照以下代码示例进行操作: ``` import time import json import datetime from kafka import KafkaProducer # 创建KafkaProducer实例 producer = KafkaProducer(bootstrap_servers=["192.168.10.39:9092"]) # 生成要发送的数据 i = 0 for m in range(30): i += 1 time_now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") print(time_now, i) result = { "key": str(i), "value": time_now } # 发送数据到指定的topic producer.send("testTopic", value=json.dumps(result).encode('utf-8')) time.sleep(3) ``` 以上代码示例创建了一个KafkaProducer实例,并使用producer.send方法将数据发送到名为"testTopic"的topic中。 综上所述,要在Python中使用KafkaProducer,您可以引入kafka模块并创建KafkaProducer实例来发送消息 [2 [3。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [python使用kafka模块,报错SyntaxError: invalid syntax](https://blog.csdn.net/qq_25038325/article/details/125764514)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [Kafka教程(三)—— Python操作kafka](https://blog.csdn.net/m0_37565948/article/details/98215388)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值