kafka producer开发指导

bootstrap.servers

一般只需要配置3至4台的broker ,这样producer一旦连接到集群中的任一台,就能够那道整个集群的broker信息

acks

0 代表不用等待就认为成功 1 leader成功就认为成功 all所有副本成功就认为成功

当需要保证消息不丢,这个需要设置成all

针对producer的同步发送

producer.send() 这个是异步发送

producer.send().get() 这个是阻塞发送

producer什么时候建立与broker的TCP连接?

1、默认在producer初始化的时候建立跟broker的连接

除了最开始初始化,producer还会在更新元数据,或者发送数据时尝试建立TCP连接。

1、producer往一个不存在的主题发送消息。发现主题不存在,producer会重新拉取新的元数据,然后重新建立连接

2、producer通过metadata.max.age.ms 参数定期的更新元数据信息,默认值是300000 。默认5分钟,每5分钟拉取最新的元数据信息

何时关闭TCP连接?

1、用户自己关闭。比如用producer.close()

2、程序自己关闭。producer的参数connection.max.idle.ms 默认9分钟,9分钟连接空闲,就会关闭

事务Producer

使用参数 enable.idempotence true

实际上是保证多条消息同时投递到kafka,它能保证跨分区,跨会话间的幂等性。

针对事务producer 发送事务消息,一定要设置事务ID

同时消费者要设置isolation.level:read_committed 表示允许消费的是已提交的消息[这个包含非事务的单发消息]

特别注意:性能会有所牺牲

如何保证producer消息不丢失

1、topic配置 开启分区副本数要大于2

2、producer配置参数

ACKS_CONFIG =all

3、broker配置

min.insync.replicas 大于1

min.insync.replicas=2

4、producer.send(record,callbeak);在callback知道结果

kafka开发建议

1、可以利用key+分区策略 实现顺序性

2、如果带宽 和CPU 有限制,可以开启kafka的压缩,也可以自己在程序中实现压缩

Producer 端压缩、Broker 端保持、Consumer端解压缩。

如果在producer使用了压缩,broker为了保证crc校验,会启动解压,这个解压缩不可避免【broker实际上是一个对IO要求高,对CPU要求不高的性质,所以在解压缩方面,不用太担心对broker的CPU影响太大】

目前kafka 已经可以绕过这部分的解压缩

特别注意

key设置的重要性,一方面key设置不同值,可以保证在进行业务跟踪时的准确性。另一方面在进行选择分区的时候,默认就是利用key去选择不同的分区,如果将key设置相同,会有可能将消息投递到同一个分区,从而造成分区数据倾斜

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值