Apache kafka 卡夫卡支持每记录抓取吗

Apache kafka 卡夫卡支持每记录抓取吗,apache-kafka,Apache Kafka,截至2019年10月,卡夫卡v2.3.0版和Zookeeper v3.5.5版 场景: 考虑以下场景,消费者可以根据以下假设从主题中获取记录 Fetch的设计方式是,它可以在一次放炮中获取N记录,具体取决于每个的获取容量(以字节为单位)。这是以配置参数的形式实现和提供的,如max.partition.fetch.bytes Fetch的设计方式是,它可以根据每个记录数获取N个记录。因此,如果我将该参数设置为1,这意味着它将在每次获取尝试时获取1条记录。这就是卡夫卡现在缺少的东西。这可能是由于设计

截至2019年10月,卡夫卡v2.3.0版和Zookeeper v3.5.5版

场景:

考虑以下场景,消费者可以根据以下假设从主题中获取记录

  • Fetch的设计方式是,它可以在一次放炮中获取N记录,具体取决于每个的获取容量(以字节为单位)。这是以配置参数的形式实现和提供的,如
    max.partition.fetch.bytes
  • Fetch的设计方式是,它可以根据每个记录数获取N个记录。因此,如果我将该参数设置为1,这意味着它将在每次获取尝试时获取1条记录。这就是卡夫卡现在缺少的东西。这可能是由于设计范式和对流、并发、分区特性等的支持
  • 问题:

  • 目前是否有任何方法,我可以只获取一个记录每次提取和相应的工作
  • 我的应用程序要求记录的实时流式传输和每次获取1条记录。这两个都可以使用Kafka实现,还是我最终必须使用两种不同的消息传递系统,如Kafka+ActiveMQ等

  • 请在这方面指导我。非常感谢您。

    一个NPM包kafkajs支持并帮助您获取每个记录的机制,下面是实现这一点的示例代码

    const { Kafka } = require('kafkajs')
    
    const kafka = new Kafka({
      clientId: 'my-app',
      brokers: ['192.168.1.172:9092']
    })
    
    const consumer = kafka.consumer({ groupId: 'test-group' })
    
    const run = async () => {
    
      await consumer.connect()
      await consumer.subscribe({ topic: 'test', fromBeginning: false })
    
      await consumer.run({
        eachMessage: async ({ topic, partition, message }) => {
          console.log({
            partition,
            offset: message.offset,
            value: message.value.toString(),
          })
        },
      })
    }
    
    run().catch(console.error);
    

    在上面的代码中,您有
    eachMessage
    方法来帮助我们实现这一机制

    一个NPM包kafkajs支持并帮助您使用获取每个记录机制,下面是实现这一机制的示例代码

    const { Kafka } = require('kafkajs')
    
    const kafka = new Kafka({
      clientId: 'my-app',
      brokers: ['192.168.1.172:9092']
    })
    
    const consumer = kafka.consumer({ groupId: 'test-group' })
    
    const run = async () => {
    
      await consumer.connect()
      await consumer.subscribe({ topic: 'test', fromBeginning: false })
    
      await consumer.run({
        eachMessage: async ({ topic, partition, message }) => {
          console.log({
            partition,
            offset: message.offset,
            value: message.value.toString(),
          })
        },
      })
    }
    
    run().catch(console.error);
    

    在上面的代码中,您有
    eachMessage
    方法可以帮助我们实现此机制

    此属性应该可以帮助您做到
    记录数
    此属性应该可以帮助您做到
    记录数