一些重要的参数:

1.acks指定了在给producer发送响应前,leader broker必须要确保已成功写入该消息的副本数.当前acks有3个取值,0,1,和all

2.buffer.memory:producer启动时会首先创建一块内存缓冲区用于保存待发送的消息,然后由另一个专属的线程负责从缓冲区中读取消息执行真正的发送。默认32MB。生产过快会抛异常

3.compression.type:是否压缩消息

4.retries:可重试异常充实次数,默认为0不进行重试。

5.batch.size:默认16384即16KB producer会将发往同一分区的多条消息封装进一个batch中。当batch满了之后,producer会发送batch中的所有消息。不过,producer并不总是等待batch满了才发送消息,很有可能当batch还有很多空间时producer就发送该batch。

6.linger.ms:控制消息发送延时行为,默认为0表示消息需要立即发送,无须关心batch是否已被填满

7.max.request.size:能够发送的最大消息大小.默认1048576字节

8.request.timeout.ms当producer发送请求给broker后,broker需要在规定的时间范围内将处理结果返回给producer。默认是30秒。超时回调函数显示抛出TimeoutException异常交由用户处理。

无消息丢失配置:

producer端

block.on.full=true缓冲区填满时producer处于阻塞状态并停止接受新的消息而不是抛出异常。否则producer生产速度过快会耗尽缓冲区。新版本0.10。0.0之后可以不用理会这个参数,转而设置max.block.ms即可

ack=all所有isr同步

retries=Integer.MAX_VALUE可重试异常无限重试

max.in.flight.requests.per.connection=1设置该参数为1主要是为了防止topic同分区下的消息乱序问题。这个参数实际效果其实限制了producer在单个broker连接上能够发送的未响应请求的数量,因此,如果设置成1,则producer在某个broker发送响应之前将无法再给该broker发送producer请求。

使用带回调机制的send,

在Callback的失败处理逻辑中显式调用KafkaProducer.close(0),这样做的目的是为了处理消息的乱序问题。若不使用close(0),默认情况下producer会被允许将未完成的消息发送出去,这样就可能造成消息乱序。但是这样还怎么重试????

broker配置

unclean.leader.election.enable=false关闭unclean leader选举,即不允许非isr中的副本被选举为leader,从而避免broker端因日志水位截断而造成的消息丢失。

replication.factor>=3一致性算法三备份原则

min.insync.replicas>1用于控制某条消息至少被写入到isr中的多少个副本才算成功,设置成大于1是为了提升producer端发送语义的持久性。只有在acks被设置成all或-1时这个参数才有意义。

确保replication.factor>min.insync.replicas若2者相等,那么只要有一个副本挂掉,分区就无法正常工作,虽然有很高的持久性但可用性被极大地降低了,推荐配置成replication.factor=min.insync.replicas+1

Kafka配置实例:

private KafkaTemplate<String, String> createKafkaTemplate() {
Map<String, Object> properties = new HashMap();
properties.put("bootstrap.servers", this.servers);
properties.put("acks", "0");
properties.put("retries", 1);
properties.put("batch.size", this.batchSize);
properties.put("linger.ms", 1000);
properties.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
properties.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
return new KafkaTemplate(new DefaultKafkaProducerFactory(properties));
}

Kafka入门之producer的更多相关文章

  1. 【Kafka入门】Kafka基础结构和知识

    基本概念的总结 在基本的Kafka架构中,producer将消息发布到Kafka话题中,一个Kafka话题通常指消息的类别或者名称,Kafka话题被集群中一个充当Kafka server角色的 bro ...

  2. kafka 入门笔记 #1

    kafka 入门笔记(#1) 单机测试 下载版本,解压 tar -xzf kafka_2.11-0.10.1.1.tgz cd kafka_2.11-0.10.1.1 启动服务 Kafka用到了Zoo ...

  3. Kafka入门介绍

    1. Kafka入门介绍 1.1 Apache Kafka是一个分布式的流平台.这到底意味着什么? 我们认为,一个流平台具有三个关键能力: ① 发布和订阅消息.在这方面,它类似一个消息队列或企业消息系 ...

  4. Kafka入门 --安装和简单实用

    一.安装Zookeeper 参考: Zookeeper的下载.安装和启动 Zookeeper 集群搭建--单机伪分布式集群 二.下载Kafka 进入http://kafka.apache.org/do ...

  5. 转 Kafka入门经典教程

    Kafka入门经典教程 http://www.aboutyun.com/thread-12882-1-1.html 问题导读 1.Kafka独特设计在什么地方?2.Kafka如何搭建及创建topic. ...

  6. Kafka 入门和 Spring Boot 集成

    目录 Kafka 入门和 Spring Boot 集成 标签:博客 概述 应用场景 基本概念 基本结构 和Spring Boot 集成 集成概述 集成环境 kafka 环境搭建 Spring Boot ...

  7. _00017 Kafka的体系结构介绍以及Kafka入门案例(0基础案例+Java API的使用)

    博文作者:妳那伊抹微笑 itdog8 地址链接 : http://www.itdog8.com(个人链接) 博客地址:http://blog.csdn.net/u012185296 博文标题:_000 ...

  8. Kafka入门宝典(详细截图版)

    1.了解 Apache Kafka 1.1.简介 官网:http://kafka.apache.org/ Apache Kafka 是一个开源消息系统,由Scala 写成.是由Apache 软件基金会 ...

  9. 【转帖】Kafka入门介绍

    Kafka入门介绍 https://www.cnblogs.com/swordfall/p/8251700.html 最近在看hdoop的hdfs 以及看了下kafka的底层存储,发现分布式的技术基本 ...

随机推荐

  1. 20202405李昕亮《BASE64编码》

    BASE64编码 20202405李昕亮 参考网址: 1.https://baike.baidu.com/item/base64/8545775?fr=aladdin 2.https://blog.c ...

  2. Linux下如何使用X86 CPU的GPIO

    目录 1.前言 2.linux pinctrl子系统 3. pin controller driver 4.手动构造device 1.前言 在arm嵌入式开发中,各个外设具有固定的物理地址,我们可以直 ...

  3. VSCode--HTML代码片段(基础版,react、vue、jquery)

    起因是最近在学习前端,看的网上的demo也是在react.vue.jquery之间穿插,为了方便一键生成html模板(懒)写demo,有了以下折腾. 本人使用的前端编辑工具是vscode(方便.懒), ...

  4. 17、ContentType组件

    一 项目背景 路飞学成项目,有课程,学位课(不同的课程字段不一样),价格策略 问题: ​ 1 如何设计表结构,来表示这种规则 ​ 2 为专题课,添加三个价格策略 ​ 3 查询所有价格策略,并且显示对应 ...

  5. PS中抠图的四种方法介绍

    工具/原料 photoshop 软件(我用的是photoshop cc) 需要抠图的图片 开始的步骤 打开ps 打开图片,ctrl+O 魔棒抠图法 对于前景和后景有明显差别的图片用魔棒抠图法抠图比较容 ...

  6. spring-cloud-config 多服务共享公共配置的解决方案总结,太全了!

    问题描述 我们公司的项目是基于SpringCloud开发的微服务,用到了Spring-Cloud-Config作为微服务统一的配置中心,可以将散落在各个服务的配置进行统一配置管理. 虽然配置中心将各个 ...

  7. Spider_实践_beautifulsoup静态网页爬取所有网页链接

    # 获取百度网站首页上的所有a标签里的 href属性值: # import requests # from bs4 import BeautifulSoup # # html = requests.g ...

  8. mysql between and 是[a,b]闭区间

    mysql between and 是[a,b]闭区间 mysql between and 是[a,b]闭区间

  9. python <11>反射与异常

    反射与异常加上类似于反射的文件的操作都将在下面以代码的形式体现. 一,反射 # _*_coding:utf-8_*_ # /usr/bin/env python3 # Author:book Miki ...

  10. python爬虫 selenium 抓取 今日头条(ajax异步加载)

    from selenium import webdriver from lxml import etree from pyquery import PyQuery as pq import time ...