重要:kafka的实际问题

213 阅读2分钟

1、kafka能否实现点对点(一对一)消费?

在kafka中,多个消费者监听同个topic,此时一个消息过来,那么应该有以下两种情况可选: 1、多对一消费:所有消费者都能消费这个消息 2、一对一消费:只有一个消费者可以能消费到这条消息 请问kafka可以实现一对一消费吗?

答案: 这个是和消费者所属的组相关,如果所有的消费者都属于一个消费者组,那么一个消费者能消费到该消息,如果均属于不同的组,所有消费者均能消费到该消息

2、关于Kafka的分区

开始使用Kafka的时候,没有分区的概念,以为类似于传统的MQ中间件一样,就直接从程序中获取Kafka中的数据。 后来程序搭建了多套,发现永远只有一个消费者(消费者应用部署在多个tomcat上)会从Kafka中获取数据进行处理,后来才知道有分区这么一个概念。

答案 具体不说了,网上有很多资料,总的概括:Kafka的分区,相当于把一个Topic再细分成了多个通道,一个消费者应用可以从一个分区或多个分区中获取数据。 有4个分区,1个消费者:这一个消费者需要负责消费四个分区的数据。 有4个分区,2个消费者:每个消费者负责两个分区 有4个分区,3个消费者:消费者1负责1个分区,消费者2负责1个分区,消费者3负责两个分区 有4个分区,4个消费者:一人一个 有4个分区,5个及以上消费者:4个消费者一人一个,剩下的消费者空闲不工作。 部署的时候尽量做到一个消费者对应一个分区。

注意: 如果有指定分区号,就直接发送到指定的分区。如果没有指定分区号,生产数据的时候指定了key值的话,会通过这个key hash取值得到一个固定的分区号,从而会将数据发送到同一个partition,kafka默认的算法是获取到所有正常工作的分区号,再均衡的将每条数据分配给获取到的分区。