Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 卡夫卡制作人-发送消息列表_Apache Spark_Apache Kafka - Fatal编程技术网

Apache spark 卡夫卡制作人-发送消息列表

Apache spark 卡夫卡制作人-发送消息列表,apache-spark,apache-kafka,Apache Spark,Apache Kafka,我需要发送几批消息,并确保每批中的所有消息在同一批中一起到达消费者 例如,假设我需要在5个批次/组中发送400条消息,每个组将包含80条消息,并且需要在消费者端的同一批次中使用 我正在使用spark结构化流媒体来消费这些消息 我读过类似的问题,但我仍然对正确的方法感到困惑 制作人是否应该将所有消息(每批)放在一个列表中,然后将列表发送给卡夫卡 还有其他更好的办法吗 谢谢这可以通过创建一个包含5个分区的主题来实现,这样您就可以将每种类型的批处理消息发送到每个分区 ProducerRecord(ja

我需要发送几批消息,并确保每批中的所有消息在同一批中一起到达消费者

例如,假设我需要在5个批次/组中发送400条消息,每个组将包含80条消息,并且需要在消费者端的同一批次中使用

我正在使用spark结构化流媒体来消费这些消息

我读过类似的问题,但我仍然对正确的方法感到困惑

制作人是否应该将所有消息(每批)放在一个列表中,然后将列表发送给卡夫卡

还有其他更好的办法吗


谢谢

这可以通过创建一个包含5个分区的主题来实现,这样您就可以将每种类型的批处理消息发送到每个分区

ProducerRecord(java.lang.String topic, java.lang.Integer partition, K key, V value)
Creates a record to be sent to a specified topic and partition
我们可以创建5个消费者并将每个消费者分配到每个分区,但我不确定每个消费者poll()是否会一次提取该分区中的所有消息

手动分区分配

例如: 如果进程正在维护与该分区相关联的某种本地状态(如本地磁盘键值存储),那么它应该只获取它在磁盘上维护的分区的记录。
如果流程本身是高可用的,并且在失败时将重新启动(可能使用集群管理框架,如Thread、Mesos或AWS设施,或者作为流处理框架的一部分)。在这种情况下,Kafka无需检测故障并重新分配分区,因为消费进程将在另一台机器上重新启动。
要使用此模式,而不是使用subscribe订阅主题,只需调用assign(Collection),其中包含要使用的分区的完整列表

 String topic = "foo";
 TopicPartition partition0 = new TopicPartition(topic, 0);
 TopicPartition partition1 = new TopicPartition(topic, 1);
 consumer.assign(Arrays.asList(partition0, partition1));