美文网首页眼君的大数据之路
Kafka使用笔记(三、消费者详解)

Kafka使用笔记(三、消费者详解)

作者: 眼君 | 来源:发表于2020-10-12 16:35 被阅读0次

    概念

    消费者和消费组

    kafka消费者是消费组的一部分,当多个消费者形成一个消费组来消费主题时,每个消费者会接收到不同分区的消息。假设有一个T1主题,该主题有4个分区,同时我们有一个消费组G1,该组只有一个消费者C1。那么消费者C1将会收到这4个分区的消息,如下图所示:



    Kafka一个很重要的特性就是,只需写入一次消息,可以支持任意多的应用读取这个消息。换句话说,每个应用都可以读到全量的消息。为了使得每个应用都能读到全量消息,应用需要有不同的消费组。对于上面的例子,假如我们新增一个新的消费组G2,而这个消费组有两个消费者,那么会是这样的:


    订阅主题和分区

    创建完消费者后我们便可以订阅主题了,只需要通过调用subscribe()方法即可,这个方法接收一个主题列表:

    KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(props);
    consumer.subscribe(Arrays.asList(topic));
    

    另外,我们也可以使用正则表达式来匹配多个主题,而且订阅之后如果又有匹配新主题,那么这个消费组会立即对其进行消费。正则表达式在连接Kafka与其他系统时非常有用。比如订阅所有的测试主题:

    consumer.subscribe(Pattern.compile("test*"));
    

    指定订阅的分区:

    //指定订阅的分区
    consumer.assign(Arrays.asList(new TopicPartition("topic0701",0)));
    

    位移提交

    对于Kafka中的分区而言,它的每条消息都有唯一的offset,用来表示消息在分区中的位置。
    当我们调用poll()时,该方法会返回我们没有消费的消息。当消息从broker返回消费者时,broker并不跟踪这些消息是否被消费者接收到;Kafka让消费者自身来管理消费的位移,并向消费者提供更新位移的接口,这种更新位移方式称为提交(commit)。

    相关文章

      网友评论

        本文标题:Kafka使用笔记(三、消费者详解)

        本文链接:https://www.haomeiwen.com/subject/guuupktx.html