在我们上一篇Kafka教程中,我们讨论了Kafka Cluster。今天,我们将通过示例讨论Kafka Producer。此外,我们将看到KafkaProducer API和Producer API。此外,我们将学习Kafka Producer中的配置设置。最后,我们将在Kafka Producer教程中讨论简单的生产者应用程序。为了将消息发布到Apache Kafka主题,我们使用Kafka Producer。 
那么,让我们详细探讨Apache Kafka Producer。

卡夫卡初学者制片人

1.什么是卡夫卡制片人?

基本上,作为数据流源的应用程序就是我们所说的生产者。为了生成令牌或消息并进一步将其发布到Kafka集群中的一个或多个主题,我们使用Apache Kafka Producer。此外,Kafka的Producer API有助于打包消息或令牌并将其传递给Kafka Server。
了解如何创建Kafka客户端
此外,下图显示了Apache Kafka Producer的工作情况。

Kafka Producer - Apache Kafka Producer Working

Kafka Producer Client中提供了一些API。

2. KafkaProducer API

但是,要将记录流发布到一个或多个Kafka主题,此Kafka Producer API允许应用程序。而且,它的核心部分是KafkaProducer类。基本上,通过以下方法,此类提供了一个在其构造函数中连接Kafka代理的选项:

  • 为了将消息异步发送到主题,KafkaProducer类提供了send方法。所以,send()的签名是:
  • producer.send(new ProducerRecord<byte[],byte[]>(topic,
    partition, key1, value1) , callback);
  • ProducerRecord - 通常,生产者管理等待发送的记录的缓冲区。
  • 回调- 当服务器确认记录时,用户提供的回调执行。

注意:这里,null表示没有回调。
我们来讨论Kafka-序列化和反序列化

  • 此外,为确保所有先前发送的消息已实际完成,KafkaProducer类提供了flush方法。所以,flush方法的语法是 -
  1. public void flush()
  • 此外,为了获取给定主题的分区元数据,KafkaProducer类为方法提供分区。而且,我们可以将它用于自定义分区。所以,这种方法的签名是:
  1. public Map metrics()

这样,此方法返回生产者维护的内部指标的映射。

  • public void close()- 它还提供了一个close方法块,直到完成所有先前发送的请求。

3.生产者API

Producer类是Kafka Producer API的核心部分。通过以下方法,它提供了一个在其构造函数中连接Kafka代理的选项。

一个。卡夫卡 制片人班

基本上,要将消息发送到单个或多个主题,生产者类提供了一种发送方法。以下是我们可以使用的签名。

  1. public void send(KeyedMessaget<k,v> message)

-将数据发送到单个主题, 使用同步或异步生成器按键进行分区。

  1. public void send(List<KeyedMessage<k,v>>messages)

- 将数据发送到多个主题。
使用JMeter查看Apache Kafka-Load测试

Properties prop = new Properties();
prop.put(producer.type,”async”)
ProducerConfig config = new ProducerConfig(prop);
 

但是,有两种类型的生成器,例如Sync和Async。
虽然,对于Sync生产者,适用相同的API配置。两者之间只有一个区别:Sync生成器直接发送消息但在后台发送消息,而当我们想要更高的吞吐量时,我们更喜欢Async生成器。但是,Async生成器没有send()的回调函数来注册先前版本中的错误处理程序,如0.8。它仅在当前版本的0.9中可用。

湾 Public Void Close()

为了关闭与所有Kafka代理的生成器池连接,producer类提供了一个public void close()方法。
阅读Kafka用例和应用程序

4. Kafka Producer API的配置设置

在这里,我们列出了Kafka Producer API的主要配置设置:
a。 client.id
它标识生产者应用程序。
湾 producer.type
同步或异步。
C。 acks
基本上,它控制被认为完成的生产者请求的标准。
d。 重试
“重试”意味着如果生产者请求以某种方式失败,则自动重试特定值。
即 bootstrap.servers
它引导代理列表。
F。 linger.ms
基本上,如果我们想减少请求的数量,我们可以将linger.ms设置为大于某个值的值。
G。 key.serializer
它是串行器接口的关键。
H。 value.serializer
序列化程序接口的值。
一世。 batch.size
简单地说,缓冲区大小。
学家 buffer.memory
“buffer.memory”控制生产者可用于缓冲的总内存量。

5. ProducerRecord API

通过使用以下签名,它是发送到Kafka群集的键/值对。ProducerRecord类构造函数用于创建包含分区,键和值对的记录。
public ProducerRecord(string topic,int partition,k key,v value)

  1. 主题 - 将附加到记录的用户定义主题名称。
  2. 分区 - 分区计数。
  3. 密钥 - 将包含在记录中的密钥。
  4. 价值 - 记录内容。

public ProducerRecord(string topic,k key,v value)
要使用键,值对和没有分区创建记录,我们使用ProducerRecord类构造函数。

  1. 主题 - 创建分配记录的主题。
  2. 密钥 - 记录的关键。
  3. 价值 - 记录内容。

public ProducerRecord(string topic,v value)
此外,没有分区和键,ProducerRecord类会创建一个记录。

  1. 主题 - 创建主题。
  2. 价值 - 记录内容。

现在,我们在这里列出ProducerRecord类方法 - 
1. public string topic()
主题将附加到记录中。
2. public K key()
将包含在记录中的密钥。如果没有这样的键,则返回null。
3. public V value()
记录内容。
4. partition()
记录的分区计数。

6.简单的卡夫卡制片人应用程序

但是,请确保首先启动ZooKeeper和Kafka代理然后使用create topic命令在Kafka代理中创建您自己的主题。然后创建一个名为Sim-pleProducer.java 的Java类,并继续进行以下编码:

//import util.properties packages
import java.util.Properties;
//import simple producer packages
import org.apache.kafka.clients.producer.Producer;
//import KafkaProducer packages
import org.apache.kafka.clients.producer.KafkaProducer;
//import ProducerRecord packages
import org.apache.kafka.clients.producer.ProducerRecord;
//Create java class named “SimpleProducer”
public class SimpleProducer {
public static void main(String[] args) throws Exception{
// Check arguments length value
if(args.length == 0){
System.out.println("Enter topic name”);
return;
}
//Assign topicName to string variable
String topicName = args[0].toString();
// create instance for properties to access producer configs
Properties props = new Properties();
//Assign localhost id
props.put("bootstrap.servers", “localhost:9092");
//Set acknowledgements for producer requests.
props.put("acks", “all");
//If the request fails, the producer can automatically retry,
props.put("retries", 0);
//Specify buffer size in config
props.put("batch.size", 16384);
//Reduce the no of requests less than 0
props.put("linger.ms", 1);
//The buffer.memory controls the total amount of memory available to the producer for buffering.
props.put("buffer.memory", 33554432);
props.put("key.serializer",
"org.apache.kafka.common.serializa-tion.StringSerializer");
props.put("value.serializer",
"org.apache.kafka.common.serializa-tion.StringSerializer");
Producer<String, String> producer = new KafkaProducer
<String, String>(props);
for(int i = 0; i < 10; i++)
producer.send(new ProducerRecord<String, String>(topicName,
Integer.toString(i), Integer.toString(i)));
System.out.println(“Message sent successfully”);
producer.close();
}
}

一个。汇编

通过使用以下命令,我们可以编译应用程序。
我们来修改Kafka Commands

//import util.properties packages
import java.util.Properties;
//import simple producer packages
import org.apache.kafka.clients.producer.Producer;
//import KafkaProducer packages
import org.apache.kafka.clients.producer.KafkaProducer;
//import ProducerRecord packages
import org.apache.kafka.clients.producer.ProducerRecord;
//Create java class named “SimpleProducer”
public class SimpleProducer {
public static void main(String[] args) throws Exception{
// Check arguments length value
if(args.length == 0){
System.out.println("Enter topic name”);
return;
}
//Assign topicName to string variable
String topicName = args[0].toString();
// create instance for properties to access producer configs
Properties props = new Properties();
//Assign localhost id
props.put("bootstrap.servers", “localhost:9092");
//Set acknowledgements for producer requests.
props.put("acks", “all");
//If the request fails, the producer can automatically retry,
props.put("retries", 0);
//Specify buffer size in config
props.put("batch.size", 16384);
//Reduce the no of requests less than 0
props.put("linger.ms", 1);
//The buffer.memory controls the total amount of memory available to the producer for buffering.
props.put("buffer.memory", 33554432);
props.put("key.serializer",
"org.apache.kafka.common.serializa-tion.StringSerializer");
props.put("value.serializer",
"org.apache.kafka.common.serializa-tion.StringSerializer");
Producer<String, String> producer = new KafkaProducer
<String, String>(props);
for(int i = 0; i < 10; i++)
producer.send(new ProducerRecord<String, String>(topicName,
Integer.toString(i), Integer.toString(i)));
System.out.println(“Message sent successfully”);
producer.close();
}
}

湾 执行

此外,使用以下命令,我们可以执行该应用程序。

  1. java -cp “/path/to/kafka/kafka_2.11-0.9.0.0/lib/*”:. SimpleProducer <topic-name>

C。产量

消息已成功发送
要检查上述输出,请打开新终端并键入Consumer CLI命令以接收消息。

  1. >> bin/kafka-console-consumer.sh --zookeeper localhost:2181 —topic <topic-name> —from-beginning

所以,这就是Apache Kafka Producer。希望你喜欢我们的解释。
阅读Apache Kafka Workflow | Kafka Pub-Sub Messaging

7.总结:卡夫卡制片人

因此,在这个Kafka教程中,我们已经看到了Kafka Producer 的概念以及示例。现在,在下一个教程中,我们将了解Kafka Consumer,以便使用来自Kafka集群的消息。此外,我们学习了Producer API,Producer类,public void close。此外,我们还讨论了Kafka Producer API和Producer Record API的配置设置。最后,我们在编译,执行和输出的帮助下看到了SimpleProducer Application。此外,如果您有任何疑问,请随时在评论部分询问。

Apache Kafka Producer For Beginners的更多相关文章

  1. 使用命令进行Apache Kafka操作

    1.目标 我们可以在Kafka集群上执行几个Apache Kafka Operations .因此,在本文中,我们将详细讨论所有Apache Kafka操作.它还包括有助于实现这些Kafka操作的命令 ...

  2. Kafka排队:Apache Kafka作为消息传递系统

    1.目标 在这个Apache Kafka教程中,我们将学习Apache Kafka  Queuing 的概念  .基本上,Kafka中的排队是传统消息传递的模型之一.所以,让我们首先简要介绍Kafka ...

  3. 为什么Apache Kafka如此受欢迎

    1.目标 今天,在这个Kafka教程中,我们将学习所有Kafka功能,如可扩展性,可靠性,耐用性,这些都说明了Kafka如此受欢迎的原因.我们将详细讨论Kafka的每个功能.但在那之前让我们明白什么是 ...

  4. Error when sending message to topic test with key: null, value: 2 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)

    windows下使用kafka遇到这个问题: Error when sending message to topic test with key: null, value: 2 bytes with ...

  5. Kafka遇到30042ms has passed since batch creation plus linger time at org.apache.kafka.clients.producer.internals.FutureRecordMetadata.valueOrError(FutureRecordMetadata.java:94)

    问题描述: 运行生产者线程的时候显示如下错误信息: Expiring 1 record(s) for XXX-0: 30042 ms has passed since batch creation p ...

  6. apache kafka系列之Producer处理逻辑

     最近研究producer的负载均衡策略,,,,我在librdkafka里边用代码实现了partition 值的轮询方法,,,但是在现场验证时,他的负载均衡不起作用,,,所以来找找原因: 下文是一篇描 ...

  7. Apache Kafka(六)- High Throughput Producer

    High Throughput Producer 在有大量消息需要发送的情况下,默认的Kafka Producer配置可能无法达到一个可观的的吞吐.在这种情况下,我们可以考虑调整两个方面,以提高Pro ...

  8. Apache Kafka(五)- Safe Kafka Producer

    Kafka Safe Producer 在应用Kafka的场景中,需要考虑到在异常发生时(如网络异常),被发送的消息有可能会出现丢失.乱序.以及重复消息. 对于这些情况,我们可以创建一个“safe p ...

  9. Windows OS上安装运行Apache Kafka教程

    Windows OS上安装运行Apache Kafka教程 下面是分步指南,教你如何在Windows OS上安装运行Apache Zookeeper和Apache Kafka. 简介 本文讲述了如何在 ...

随机推荐

  1. CF622F——自然数幂和模板&&拉格朗日插值

    题意 求 $ \displaystyle \sum_{i=1}^n i^k \ mod (1e9+7), n \leq 10^9, k \leq 10^6$. CF622F 分析 易知答案是一个 $k ...

  2. Problem I. Wiki with Special Poker Cards

    Problem I. Wiki with Special Poker CardsInput file: standard input Time limit: 1 secondOutput file: ...

  3. ARDUIN人体检测模块

    http://henrysbench.capnfatz.com/henrys-bench/arduino-sensors-and-input/arduino-hc-sr501-motion-senso ...

  4. LeetCode 877. Stone Game

    原题链接在这里:https://leetcode.com/problems/stone-game/ 题目: Alex and Lee play a game with piles of stones. ...

  5. CF #365 DIV2 D Mishka and Interesting sum 区间异或+线段树

    D. Mishka and Interesting sum time limit per test 3.5 seconds memory limit per test 256 megabytes in ...

  6. CF1172E Nauuo and ODT

    CF1172E Nauuo and ODT 神仙题orz 要算所有路径的不同颜色之和,多次修改,每次修改后询问. 对每种颜色\(c\)计算多少条路径包含了这个颜色,不好算所以算多少条路径不包含这个颜色 ...

  7. Zotero使用教程(2)-数据备份

    小书匠 这篇文章的目标是让你无论是 换系统,重新安装zotero等都可以还原回你的文献库,而且整个过程基本是自动完成的. 这部分解决下面的两种情况: 1.zotero有自己既定的一套存储方式,不是一般 ...

  8. CDH CM版本 6.0.1 升级到 CM 6.2.0 当前最新版本(CentOS 7.x)

    CDH 的 6.0.1 是一个尴尬的版本,那时候 cloudera 还没有将 spark 更新到 2.4 还使用的是 spark 2.2版本. 但后来我们发现 2.3 | 2.4 更新了非常多的 fe ...

  9. 第12组 Beta冲刺(3/5)

    Header 队名:To Be Done 组长博客 作业博客 团队项目进行情况 燃尽图(组内共享) 展示Git当日代码/文档签入记录(组内共享) 注: 由于GitHub的免费范围内对多人开发存在较多限 ...

  10. mysql 去除字符串中的空格

    mysql> select " ddd dddee "; +--------------+ | ddd dddee | +--------------+ | ddd ddde ...