2017-07-18 1 views
0

Hallo ich verwende Kafka in meiner Anwendung für die Warteschlange. Ich pumpe 75k records/sec zu meiner Applikation, die von kafka in die Warteschlange gestellt wird. Meine Anwendung wird auf openstack vms bereitgestellt. Aufgrund einiger Infrastrukturprobleme, wenn Kafka diese Datensätze auf dem Datenträger speichert, sehe ich mich mit CRC-Problemen konfrontiert, die mit der Beschädigung von Datensätzen zusammenhängen. Unten ist die Ausnahme:Können wir Kafka nur zum Einreihen in die Warteschlange verwenden, ohne auf der Festplatte zu speichern? Wenn ja, wie können wir es erreichen?

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 

So ist es eine Möglichkeit, kafka zu verwenden, nur für Warteschlangen ohne die Aufzeichnungen auf Festplatte zu speichern? Wenn ja, wie können wir es erreichen?

+0

Nur ein Kommentar, dass die Version 0.9 von Kafka fast 2 Jahre alt ist und Sie möchten möglicherweise aktualisieren, um einige der neuen Funktionen Ike in 0.11 zu erhalten, können Sie alle Nachrichten in der Warteschlange älter als den Offset, den Sie verarbeitet haben, löschen –

Antwort

2

Gibt es also eine Möglichkeit, Kafka nur für die Warteschlange zu verwenden, ohne die Datensätze auf der Festplatte zu speichern? Wenn ja, wie können wir es erreichen?

Im Allgemeinen, nein, das ist nicht möglich.

Was Sie vielleicht als (grobe!) Problemumgehung tun könnten, ist die Verwendung eines RAM drive und die Konfiguration Ihrer Kafka-Broker, um ihre Daten auf diesem RAM-Laufwerk zu speichern. Natürlich hat die Verwendung eines RAM-Laufwerks mehrere Nachteile, wie beispielsweise das Risiko eines Datenverlusts, da Daten nicht für dauerhaften Speicher verfügbar sind. Es geht auch davon aus, dass der Speicher Ihrer OpenStack-VMs nicht die gleichen Probleme mit der Beschädigung hat wie ihre Festplatten.

Vielleicht wäre ein besserer Ansatz, Ihre OpenStack-Umgebung zu reparieren ...?

Verwandte Themen