Kafka--Producer&Consumer

305 阅读2分钟

一、Producer

这里写图片描述

  开始,我们需要构造ProducerRecord,它必须包含想要存储的topic以及想要发送的数据,另外,也可以直接指定特殊的key或者分区。当发送ProducerRecord时,producer作的第一件事情就是把key和value序列化成字符数组ByteArrays,从而通过网络传输。
然后,数据进入partitioner。如果ProducerRecord指定了分区,那么分区器什么也不会做,直接返回指定的分区号。如果没有设置分区,那么通常会基于ProducerRecord的key分配分区。一旦选择好了分区,producer就知道数据该进入哪一个topic哪一个分区。然后会把数据保存在一个记录集里,这个记录集保存了相同topic以及分区的数据。另外一个独立的线程将会负责把记录集发送到对应的broker。
当broker收到消息时,会返回响应信息。如果消息成功写入kafka,将会返回主题的RecordMetadata对象,这个对象里面包含了分区的信息以及记录在分区中的offset。如果broker写入失败,将会返回错误。如果producer接收到错误,它将会尝试几次重新发送数据。
在本章中,我们将会学习到如何使用Kafka Producer,在这个过程中需要时常回顾一下图3-1中的流程。后续将会讲解:如何创建KafkaProducer以及ProducerRecord对象,如何使用默认的分区器和序列化,如何处理Kafka Producer返回的错误,如何自定义序列化以及分区器规则,同时也会回顾很多prodcuer相关的配置。

二、Consumer

三、

四、出现问题

4.1、org.apache.kafka.common.serialization.Serdes 的依赖

		<!-- org.apache.kafka.common.serialization.Serdes  
		 -->
		<dependency>
			<groupId>org.apache.kafka</groupId>
			<artifactId>kafka_2.10</artifactId>
			<version>0.9.0.1</version>
		</dependency>		

4.2、java.lang.NoSuchMethodError: org.apache.kafka.common.utils.Utils.writeUnsignedInt(Ljava/nio/ByteBuffer;IJ

4.3、kafka-stream的依赖

		<!-- kafka-stream的依赖 -->
		<dependency>
			<groupId>org.apache.kafka</groupId>
			<artifactId>kafka-streams</artifactId>
			<version>0.10.0.1</version>
		</dependency>

4.4、 kafka connect 依赖

	<!-- kafka connect 依赖 -->
		<dependency>
			<groupId>org.apache.kafka</groupId>
			<artifactId>connect-api</artifactId>
			<version>0.10.2.1</version>
		</dependency>