Apache kafka 我们可以使用卡夫卡只是为了排队而不存储在磁盘上吗?如果是这样的话,我们怎样才能做到呢?

Apache kafka 我们可以使用卡夫卡只是为了排队而不存储在磁盘上吗?如果是这样的话,我们怎样才能做到呢?,apache-kafka,Apache Kafka,嗨,我正在排队申请中使用卡夫卡。我正在以每秒75k的速度向我的应用程序发送记录,这些记录将由卡夫卡排队。我的应用程序部署在openstack虚拟机上。由于卡夫卡将这些记录存储到磁盘时存在一些基础设施问题,我面临着与记录损坏相关的CRC问题。以下是例外情况: org.apache.kafka.common.KafkaException: Error deserializing key/value for partition TcpMessage-3 at offset 1331363158

嗨,我正在排队申请中使用卡夫卡。我正在以每秒75k的速度向我的应用程序发送记录,这些记录将由卡夫卡排队。我的应用程序部署在openstack虚拟机上。由于卡夫卡将这些记录存储到磁盘时存在一些基础设施问题,我面临着与记录损坏相关的CRC问题。以下是例外情况:

org.apache.kafka.common.KafkaException: Error deserializing key/value for partition TcpMessage-3 at offset 1331363158
        at org.apache.kafka.clients.consumer.internals.Fetcher.parseRecord(Fetcher.java:628) ~[kafka-clients-0.9.0.1.jar:?]
        at org.apache.kafka.clients.consumer.internals.Fetcher.handleFetchResponse(Fetcher.java:566) ~[kafka-clients-0.9.0.1.jar:?]
        at org.apache.kafka.clients.consumer.internals.Fetcher.access$000(Fetcher.java:69) ~[kafka-clients-0.9.0.1.jar:?]
        at org.apache.kafka.clients.consumer.internals.Fetcher$1.onSuccess(Fetcher.java:139) ~[kafka-clients-0.9.0.1.jar:?]
        at org.apache.kafka.clients.consumer.internals.Fetcher$1.onSuccess(Fetcher.java:136) ~[kafka-clients-0.9.0.1.jar:?]
        at org.apache.kafka.clients.consumer.internals.RequestFuture.fireSuccess(RequestFuture.java:133) ~[kafka-clients-0.9.0.1.jar:?]
        at org.apache.kafka.clients.consumer.internals.RequestFuture.complete(RequestFuture.java:107) ~[kafka-clients-0.9.0.1.jar:?]
        at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient$RequestFutureCompletionHandler.onComplete(ConsumerNetworkClient.java:380) ~[kafka-clients-0.9.0.1.jar:?]
        at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:274) [kafka-clients-0.9.0.1.jar:?]
        at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.clientPoll(ConsumerNetworkClient.java:320) [kafka-clients-0.9.0.1.jar:?]
        at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:213) [kafka-clients-0.9.0.1.jar:?]
        at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:193) [kafka-clients-0.9.0.1.jar:?]
        at org.apache.kafka.clients.consumer.KafkaConsumer.pollOnce(KafkaConsumer.java:908) [kafka-clients-0.9.0.1.jar:?]
        at org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:853) [kafka-clients-0.9.0.1.jar:?]
        at com.affirmed.mediation.edr.kafka.tcpMessage.TcpMessageConsumer.doWork(TcpMessageConsumer.java:196) [EdrServer.jar:?]
        at com.affirmed.mediation.edr.kafka.tcpMessage.TcpMessageConsumer.run(TcpMessageConsumer.java:255) [EdrServer.jar:?]
Caused by: org.apache.kafka.common.record.InvalidRecordException: **Record is corrupt (stored crc = 2053731240, computed crc = 2767221639)**
        at org.apache.kafka.common.record.Record.ensureValid(Record.java:226) ~[kafka-clients-0.9.0.1.jar:?]
        at org.apache.kafka.clients.consumer.internals.Fetcher.parseRecord(Fetcher.java:617) ~[kafka-clients-0.9.0.1.jar:?]
        ... 15 more
那么,有没有办法使用卡夫卡只用于排队,而不将记录存储到磁盘上?如果是,我们如何实现

那么,有没有办法使用卡夫卡只用于排队,而不将记录存储到磁盘上?如果是,我们如何实现

一般来说,不,这是不可能的

作为一个(粗略的!)解决方法,您可能需要使用一个代理并将您的Kafka代理配置为将其数据存储在此RAM驱动器上。当然,使用RAM驱动器有几个缺点,比如数据丢失的风险很大,因为数据不能持久存储。它还假设您的OpenStack虚拟机的内存不会受到与其磁盘相同的损坏问题的影响

也许更好的方法是修复OpenStack环境

那么,有没有办法使用卡夫卡只用于排队,而不将记录存储到磁盘上?如果是,我们如何实现

一般来说,不,这是不可能的

作为一个(粗略的!)解决方法,您可能需要使用一个代理并将您的Kafka代理配置为将其数据存储在此RAM驱动器上。当然,使用RAM驱动器有几个缺点,比如数据丢失的风险很大,因为数据不能持久存储。它还假设您的OpenStack虚拟机的内存不会受到与其磁盘相同的损坏问题的影响


也许一个更好的方法是修复OpenStack环境……/P>只是一个评论,卡夫卡的版本0.9已经将近2年了,你可能想考虑升级,以获得一些新的特性IKE在0.11。你可以编程地删除队列中的所有消息,而不是你所处理的偏移量。卡夫卡的版本0.9几乎为2岁,您可能需要考虑升级以获得0.11中的一些新特性IKE。您可以以编程方式删除队列中的所有消息,而不是已处理的偏移量。