kafka-producer版本对比

Kafka的producer的API根据版本的不同分为kafka0.8.1.X之前的

kafka.javaapi.producer.Producer.以及之后版本中出现的org.apache.kafka.clients.producer.KafkaProducer,

建议以后都直接使用org.apache.kafka.clients.producer.KafkaProducer,选择的依据。

1),kafka.javaapi.producer.Producer有丢数情况,而org.apache.kafka.clients.producer.KafkaProducer还没出现过意料之外的丢数。

2),org.apache.kafka.clients.producer.KafkaProducer的性能也比旧的效率高,请参照官网的测试。

由于新版本的优势比较大,在这里不在赘述旧版本的信息。

新版本producer的基本过程

1),生产者客户端应用程序产生消息。

2),链接对象将消息包装到请求中,把消息放入本地的内存队列中,然后由一个消息发送线程从队列拉取消息,

以批量的方式发送到服务端。kafka的记录收集器(RecordAccumulator)负责缓存生产者的消息,发送线程(Sender)

负责记录收集器的批量信息,通过网络发送给服务端。

3),服务端连接对象负责接收请求,将消息以文件形式存储,为了保证客户端网络请求的快速响应,kafka使用选择器(Selector)处理网络连接和读写请求,

使用网络连接(NetworkClient)处理客户端网络请求。

4),服务端响应结果给客户端。

5),确认发送成功,循环发送下个批次。

新版本producer的配置

1),bootstrap.servers

用于配置cluster中borker的host/port对。可以配置一项或者多项,不需要将cluster中所有实例都配置上。因为它后自动发现所有的broker。
如果要配置多项,格式是:host1:port1,host2:port2,host3:port3….

2),key.serializer

配置key序列化类名。如果是自定义的key,那么自定义的key类要实现Serializer接口。

3),value.serializer

配置value序列化类名。如果是自定义的value,那么自定义的value类要实现Serializer接口。

4),acks 可配置项为all, -1, 0, 1,默认值是1

为了确保message record被broker成功接收。Kafka Producer会要求Borker确认请求(发送RecordBatch的请求)完成情况。
对于message接收情况的确认,Kafka Broker支持了三种情形:
a、不需要确认;
b、leader接收到就确认;
c、等所有可用的follower复制完毕进行确认。
可以看出,这三种情况代表不同的确认粒度。在Java Producer Client中,对三种情形都做了支持,上述三种情形分别对应了三个配置项:0、1、-1。其实还有一个值是all,它其实就是-1。

5),buffer.memory 默认值为33554432=32M

producer缓存区大小

producer可以用来缓存数据的内存大小。如果数据产生速度大于向broker发送的速度,producer会阻塞或者抛出异常,以“block.on.buffer.full”来表明,这个配置是默认值是flase,也就是当bufferpool满时,不会抛出BufferExhaustException,而是根据max.block.ms进行阻塞,如果超时抛出TimeoutExcpetion。如果这个属性值是true,则会把max.block.ms值设置为Long.MAX。并抛出异常。

6),compression.type

Kafka提供了多种压缩类型,可选值有4个: none, gzip, snappy, lz4。默认值是none。

7),retries

当一个RecordBatch发送失败时,就会重新改善以确保数据完成交付。该配置设置了重试次数,值范围[0, Integer.Max]。如果是0,即便失败,也不会进行重发。
如果允许重试(即retries>0),但max.in.flight.requests.per.connection 没有设置成1。这种情况下,就可能会出现records的顺序改变的现象。例如:一个prodcuder client的sender线程在一次轮询中,如果有两个recordbatch都要发送到同步一个partition中,此时它们肯定是发往同一个broker的,并且是用的同一个TCP connection。如果出现RecordBatch1先发,但是发送失败,RecordBatch2紧接着RecordBatch1发送,它是发送成功的。然后RecordBatch1会进行重发。这样一来,就出现了broker接收到的顺序是RecordBatch2先于RecordBatch1的情况。

8),batch.size

RecordBatch的最大容量。默认值是16384(16KB)。

当多条消息需要发送到同一个分区时,生产者会尝试合并网络请求。这会提高client和生产者的效率。如果消息体大于这个配置,生产者不会尝试发送消息。发送给kafka的消息包含不同的批次,每批发送给一个分区。批次大小太小的话可能会降低吞吐量。如果设为0,会禁用批处理功能。如果批次设置很大,可能会有些浪费内存,因为我们会预留这部分内存用于额外的消息。

9),client.id

逻辑名,client给broker发请求是会用到。默认值是:”” 没有任何功能性的目的,除了记录和跟踪。

10),connections.max.idle.ms

在配置项的时间之后,关闭空闲的链接,也是在该配置项的时候段内都是空闲的话,就关闭连接。

11),linger.ms

默认值:0,即不延迟。

消息延迟发送的毫秒数,目的是为了等待多个消息,在同一批次发送,减少网络请求。

producer组将会汇总任何在请求与发送之间到达的消息记录一个单独批量的请求。通常来说,这只有在记录产生速度大于发送速度的时候才能发生。然而,在某些条件下,客户端将希望降低请求的数量,甚至降低到中等负载一下。这项设置将通过增加小的延迟来完成–即,不是立即发送一条记录,而是等待其他消息,够成批次再发送,producer将会等待给定的延迟时间以允许其他消息记录发送,这些消息记录可以批量处理。这项设置设定了批量处理的更高的延迟边界:一旦我们获得某个partition的batch.size,他将会立即发送而不顾这项设置,然而如果我们获得消息字节数比这项设置要小的多,我们需要“linger”特定的时间以获取更多的消息。 这个设置默认为0,即没有延迟。设定linger.ms=5,例如,将会减少请求数目,但是同时会增加5ms的延迟。

新版本producer的原理设计图

aaarticlea/png;base64,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" alt="" />

新版本producer的JAVA代码

1)同步发送代码,异步发布代码,多线程发布代码(合为一体)

import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.UUID;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.apache.log4j.Logger;
import org.apache.kafka.clients.producer.Callback;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.clients.producer.RecordMetadata;
import com.e_chinalife.monitkafka.utils.LoggerUtil; public class KafkaProducerClient { private static String topics;
private static String brokers;
private static long sleep=100;
private static int records=1000;
private static long count=0;
private static Logger logs = Logger.getLogger(KafkaProducerClient.class);
private static void init() throws Exception {
try {
Properties props = new Properties();
InputStream defaultIn = null;
try {
defaultIn = ClassLoader
.getSystemResourceAsStream("producer.properties");
props.load(defaultIn);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (defaultIn != null) {
defaultIn.close();
}
}
brokers = props.getProperty("bootstrap.servers");
if (brokers != null) {brokers = brokers.trim();}
topics = props.getProperty("topics");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("init is wrong!", e);
}
} public static void main(String[] args){
try {
sender();
} catch (Exception e) {
e.printStackTrace();
}
} public static void sender() throws Exception {
init();
Map<String, Object> config = new HashMap<String, Object>();
config.put("bootstrap.servers",brokers);
//config.put("serializer.class", "kafka.serializer.StringEncoder");
config.put("key.serializer","org.apache.kafka.common.serialization.StringSerializer");
config.put("value.serializer","org.apache.kafka.common.serialization.StringSerializer");
//config.put("partitioner.class", "com.e_chinalife.monitkafka.kafka.ProducerPartitioner");自定义发送规则
config.put("acks", "-1");
// config.put("batch.size", "10000000");
// config.put("linger.ms", 0);
ExecutorService service = Executors.newFixedThreadPool(1);
service.execute(new Sender(topics, config, sleep, records)); } static class Sender implements Runnable {
private ProducerRecord<String, Object> record;
private long sleep = 1000;
private final KafkaProducer<String, Object> producer;
private int records = 0;
private String content = null;
private String topic;
//TSMSAP06VLK,TSMSAP07VLK,TSMSAP08VLK,TSMSAP09VLK
private String hostname="TSMSAP09VLK"; public Sender(String topic,
Map<String, Object> conf, long sleep, Integer records) {
this.topic = topic;
this.producer = new KafkaProducer<String, Object>(conf);
this.sleep = sleep;
this.records = records;
}
private static class proBack implements Callback{
@Override
public void onCompletion(RecordMetadata metadata, Exception exception) { if(exception != null){
logs.info("the offset of metadata is :"+metadata.offset());
logs.info(exception.getMessage(), exception);
}
logs.info("it is completed");
} }
private void logDelay(String logMsg,String topic){
Logger logger = LoggerUtil.getDelayLogger(topic);
logger.info(logMsg);
}
@Override
public void run() {
while (true) { for (int i = 0; i < records; i++) {
count++;
content =String.format("%s_%s", count,UUID.randomUUID().toString()) ;
//this.record = new ProducerRecord<String, Object>(topic,this.hostname, content);
this.record = new ProducerRecord<String, Object>(topic, content);
int kee=0;
try {
kee=producer.send(record,new proBack()).get().partition();//异步发送
//producer.send(record);//同步发送
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
System.out.println(kee); //producer.send(record);
logDelay(content, topic);
}
try {
Thread.sleep(sleep);
} catch (InterruptedException e) {
e.printStackTrace();
} }
} }
}

kafka-producer配置的更多相关文章

  1. 【转】 详解Kafka生产者Producer配置

    粘贴一下这个配置,与我自己的程序做对比,看看能不能完善我的异步带代码:   -----------------------------------------    详解Kafka生产者Produce ...

  2. 【原创】Kafka producer原理 (Scala版同步producer)

    本文分析的Kafka代码为kafka-0.8.2.1.另外,由于Kafka目前提供了两套Producer代码,一套是Scala版的旧版本:一套是Java版的新版本.虽然Kafka社区极力推荐大家使用J ...

  3. 【转】Kafka producer原理 (Scala版同步producer)

    转载自:http://www.cnblogs.com/huxi2b/p/4583249.html     供参考 本文分析的Kafka代码为kafka-0.8.2.1.另外,由于Kafka目前提供了两 ...

  4. Kafka Producer相关代码分析【转】

    来源:https://www.zybuluo.com/jewes/note/63925 @jewes 2015-01-17 20:36 字数 1967 阅读 1093 Kafka Producer相关 ...

  5. kafka主要配置

    Kafka为broker,producer和consumer提供了很多的配置参数. 了解并理解这些配置参数对于我们使用kafka是非常重要的. 官网配置地址: Configuration 每个kafk ...

  6. kafka producer生产数据到kafka异常:Got error produce response with correlation id 16 on topic-partition...Error: NETWORK_EXCEPTION

      kafka producer生产数据到kafka异常:Got error produce response with correlation id 16 on topic-partition... ...

  7. Spring Kafka中关于Kafka的配置参数

    #################consumer的配置参数(开始)################# #如果'enable.auto.commit'为true,则消费者偏移自动提交给Kafka的频率 ...

  8. 关于高并发下kafka producer send异步发送耗时问题的分析

    最近开发网关服务的过程当中,需要用到kafka转发消息与保存日志,在进行压测的过程中由于是多线程并发操作kafka producer 进行异步send,发现send耗时有时会达到几十毫秒的阻塞,很大程 ...

  9. kafka producer实例

    1. 定义要发送的消息User POJO package lenmom.kafkaproducer; public class User { public String name; public in ...

  10. Kafka producer介绍

    Kafka 0.9版本正式使用Java版本的producer替换了原Scala版本的producer.本文着重讨论新版本producer的设计原理以及基本的使用方法. 新版本Producer 首先明确 ...

随机推荐

  1. Maven 的 settings.xml 配置中的mirror节点

    maven2的setting.xml大家都知道,里面有个mirrors节点,用来配置镜像URL. mirrors可以配置多个mirror,每个mirror有id,name,url,mirrorOf属性 ...

  2. asp.net mvc session锁问题

    一.会话状态Session Session用于服务器端状态管理,使用Session之后,每个客户端都可以将实际的数据保存在服务器上,对于每个客户端的数据,将会生成一个对应的唯一的key(保存在客户端) ...

  3. webview元素定位

    genymotion 模拟器:android  5.0.0 python 2.7 appium 1.4.16.1 1.app原生元素定位(常用) driver.find_element_by_id(“ ...

  4. Django 模板继承

    本质上来说,模板继承就是先构造一个基础框架模板,而后在其子模板中对它所包含站点公用部分和定义块进行重载. 让我们通过修改 current_datetime.html 文件,为 current_date ...

  5. C# 实现邮件收取发送功能

    .Net调用QQ邮箱发送邮件   话说网上发送邮件的代码很多,但是我由于不细心,导致拿别人的代码发送邮件老是失败,今天就说说几个要注意的地方吧!!! ? 1 2 3 4 5 6 7 8 9 10 11 ...

  6. input输入框只能输入正整数

    <input type="text" value="1" onkeyup="if(this.value.length==1){this.valu ...

  7. .Netcore使用Session

    1.使用Session(进程内) 在startup中添加方法 services.AddSession  app.UseSession() services.AddDistributedMemoryCa ...

  8. MinGW-w64安装教程——著名C/C++编译器GCC的Windows版本

    本文主要讲述如何安装 C语言 编译器——MinGW-w64,特点是文章附有完整详细的实际安装过程截图,文字反而起说明提示作用. 编写本文的原因始于我的一个观点:图片可以比文字传达更多的信息,也能让其他 ...

  9. day062 中间件

    中间件:  作用: 介于request和response之间的一到处理过程,相对比较轻量级,并且在全局上改变django的输入与输出,因为改变的是全局,所以需要谨慎使用,用不好会影响到性能. 当用户发 ...

  10. mac 常用终端命令

      mkdir 文件夹夹名称 创建一个文件夹 cd 文件夹名称 进入该文件夹 git init 在该文件夹下创建一个git仓库 touch 文件名称 在该文件夹下创建一个文件 echo '内容' &g ...