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 kafka 使用Kafka的一对一和组消息传递_Apache Kafka_Messaging_Spring Kafka - Fatal编程技术网

Apache kafka 使用Kafka的一对一和组消息传递

Apache kafka 使用Kafka的一对一和组消息传递,apache-kafka,messaging,spring-kafka,Apache Kafka,Messaging,Spring Kafka,由于Kafka有一个基于主题的发布子体系结构,我如何使用Kafka处理web应用程序的一对一和组消息传递部分? 我使用的是SpringBoot+Angular stack和Docker Kafka服务器 一对一,我想你指的是一个生产者和一个消费者,即使用at作为队列 这在卡夫卡身上当然是可能的。您可以让一个消费者订阅一个主题,并通过不授予他们授权来限制其他消费者。看 请注意,消息一旦被消费,就不会被删除,而是被提交,以便同一消费者不再消费它 我想你所说的群发是指一个生产者>多个消费者或 多生产者

由于Kafka有一个基于主题的发布子体系结构,我如何使用Kafka处理web应用程序的一对一和组消息传递部分? 我使用的是SpringBoot+Angular stack和Docker Kafka服务器

一对一,我想你指的是一个生产者和一个消费者,即使用at作为队列

这在卡夫卡身上当然是可能的。您可以让一个消费者订阅一个主题,并通过不授予他们授权来限制其他消费者。看

请注意,消息一旦被消费,就不会被删除,而是被提交,以便同一消费者不再消费它

我想你所说的群发是指一个生产者>多个消费者或 多生产者>多消费者

这也是可能的,一个制作人可以生成一个主题的消息,多个消费者可以使用它们

如果所有使用者都具有相同的组id,则组中的每个使用者仅获取消息的子集

如果他们有不同的组ID,那么每个消费者将获得所有消息

多个制作人也可以制作同一主题


消费者也可以订阅多个主题。

好的,这是一个非常复杂的问题,我尝试键入一些简单的基本信息

卡夫卡主题分为多个分区。分区允许您通过将特定主题中的数据跨多个代理拆分来并行化主题-每个分区可以放置在单独的计算机上,以允许多个使用者并行读取主题

所以,如果您正在使用分区,这意味着您有多个使用者并行地使用一些分区

给定主题的使用者组-组中的每个使用者从唯一分区读取,并且组作为一个整体使用来自整个主题的所有消息

基本上,您只能有一个组,那么消息将不会在同一个消费者组中被处理两次,这就是Kafka如何准确地传递一次

如果你需要两个消费群体,你需要考虑为什么你需要两个?两组中的消费者是否处理不同的逻辑


还有更多,请检查,或者您可以回答一个较小的问题。

我会在这里写另一个答案。 根据我使用聊天服务的经验。所有消息只需要一个主题。使用精心设计的
消息
正文

公共类消息{
私有字符串来自;//用户id
私有字符串到;//用户id或组id
}
然后,您可以为此主题创建大约100个分区,并创建两个使用者来使用它们(开始时一个使用者有50个分区)。 然后,如果您的系统达到瓶颈,您可以更轻松地扩展X多个用户来处理负载

如何在消费者中分发消息。我曾经将消息发送到移动应用程序,因此所有应用程序都与服务器有一个长期存在的连接,服务器通过该通道将消息发送到应用程序。对于群组聊天,我创建了一个Redis缓存来存储群组中的所有活动用户,这样我可以更容易地获取属于该群组的用户,并向他们发送消息


另一件事,Kafka无状态,意味着Kafka不与业务逻辑分离,只充当消息系统,传输消息。如果您将业务逻辑连接到Kafka,例如创建一个主题“一对一”,并在主题完成后删除一些,Kafka将非常混乱。

Kafka支持一对一交付,您需要提供更多details@PatrickChen我有一个SpringBoot+Angular stack的web应用程序,还有用户注册和其他功能。我想在使用kafka的用户中添加消息部分,但我不知道如何使用kafka topic和partitionsyeah来实现,这意味着我必须为每个用户创建主题,并在用户被删除时删除主题?群组信息也一样?@Naiul,你不能删除卡夫卡中的信息。卡夫卡将根据其配置删除它。消费者只提交偏移量,这意味着他们已消费了消息,是时候移动到下一个了。@NafiulamFuji您不需要为每个用户创建主题,而是将所有用户存储在一个主题中,其中用户id可能是消息的键。一旦用户被删除,只需将该
user_id
null
值作为该主题的下一条消息传递出去即可。@JavaTechnical据我所知,我必须为“一对一”创建一个主题,为“组”创建另一个主题,然后在“一对一”主题中,每个分区将属于一个用户(订阅)以接收发送给他的消息。在主题“组”中,每个分区将属于希望一起聊天的组(订阅),而不是kafka用户组,因为它不允许同一用户组中的两个进程同时使用消息。这行吗?@NafiulAlamFuji我不明白你想达到什么目的,也就是说,你打算用卡夫卡做什么。。您能详细说明一下您的用例吗?据我所知,我必须为“一对一”创建一个主题,为“组”创建另一个主题,然后在“一对一”主题中,每个分区将属于一个用户(订阅)以接收发送给他的消息。在主题“组”中,每个分区将属于希望一起聊天的组(订阅),而不是kafka用户组,因为它不允许同一用户组中的两个进程同时使用消息。这样可以吗?好吧,当你选择“组”作为主题名时,有点困惑。但我对卡夫卡的描述仍然很重要。对于“一对一”,您提到了一个分区一个消费者,这意味着您在同一个组中有消费者(大小应等于分区大小,因此一个消费者将使用一个分区),但是关于“组”主题,很难理解“一起聊天”的含义,我的意思是,我知道你想创建一个聊天组,但也许卡夫卡不是最好的选择,因为在这种情况下,你的制作人也