Flume dan Kafka adalah kedua-dua platform sumber terbuka untuk pemindahan data masa nyata. Kesemuanya menampilkan daya pemprosesan yang tinggi, kependaman rendah dan kebolehpercayaan. Walau bagaimanapun, terdapat beberapa perbezaan dalam reka bentuk dan pelaksanaannya.
Flume ialah sistem pengumpulan, pengagregatan dan penghantaran log yang diedarkan, boleh dipercayai dan boleh skala. Ia menyokong berbilang sumber data, termasuk fail, Syslog, Taildir, Exec dan HTTP. Flume juga menyokong berbilang format data, termasuk teks, JSON dan Avro.
Seni bina Flume ditunjukkan dalam rajah di bawah:
[Gambar]
Komponen Flume termasuk:
Fail konfigurasi Flume adalah seperti berikut:
# Name the agent a1.sources = r1 # Describe the source r1.type = exec r1.command = tail -F /var/log/messages # Describe the sink s1.type = hdfs s1.hdfs.path = hdfs://namenode:8020/flume/logs # Use a channel which buffers events in memory c1.type = memory c1.capacity = 1000 c1.transactionCapacity = 100 # Bind the source and sink to the channel a1.channels = c1 c1.sinks = s1
Kafka ialah sistem pemesejan yang diedarkan, berskala dan tahan terhadap kesalahan. Ia menyokong berbilang format mesej termasuk teks, JSON dan Avro. Kafka juga menyokong berbilang bahasa pelanggan, termasuk Java, Python, C++ dan Go.
Seni bina Kafka ditunjukkan dalam rajah di bawah:
[Gambar]
Komponen Kafka termasuk:
Fail konfigurasi Kafka kelihatan seperti ini:
# Create a topic named "my-topic" with 3 partitions and a replication factor of 2 kafka-topics --create --topic my-topic --partitions 3 --replication-factor 2 # Start a Kafka producer kafka-console-producer --topic my-topic # Start a Kafka consumer kafka-console-consumer --topic my-topic --from-beginning
Flume dan Kafka adalah kedua-dua platform yang sangat baik untuk pemindahan data masa nyata. Kesemuanya menampilkan daya pemprosesan yang tinggi, kependaman rendah dan kebolehpercayaan. Walau bagaimanapun, terdapat beberapa perbezaan dalam reka bentuk dan pelaksanaannya.
Flume ialah sistem pengumpulan, pengagregatan dan penghantaran log yang diedarkan, boleh dipercayai dan berskala. Ia menyokong pelbagai sumber data dan format data. Fail konfigurasi Flume mudah difahami dan mudah digunakan.
Kafka ialah sistem pemesejan yang diedarkan, berskala dan tahan terhadap kesalahan. Ia menyokong berbilang format mesej dan bahasa klien. Fail konfigurasi Kafka agak kompleks dan memerlukan kos pembelajaran tertentu.
Kedua-dua Flume dan Kafka adalah platform yang sangat baik untuk penghantaran data masa nyata. Kesemuanya menampilkan daya pemprosesan yang tinggi, kependaman rendah dan kebolehpercayaan. Walau bagaimanapun, terdapat beberapa perbezaan dalam reka bentuk dan pelaksanaannya.
Flume lebih sesuai untuk pengumpulan log, pengagregatan dan penghantaran. Kafka lebih sesuai untuk pemesejan.
Berikut ialah contoh kod yang menggunakan Flume untuk mengumpul dan menghantar log:
# Create a Flume agent agent = AgentBuilder.newInstance().build() # Create a source source = ExecSourceBuilder.newInstance().setCommand("tail -F /var/log/messages").build() # Create a channel channel = MemoryChannelBuilder.newInstance().setCapacity(1000).setTransactionCapacity(100).build() # Create a sink sink = HDFSSinkBuilder.newInstance().setBasePath("hdfs://namenode:8020/flume/logs").build() # Add the source, channel, and sink to the agent agent.addSource("r1", source) agent.addChannel("c1", channel) agent.addSink("s1", sink) # Start the agent agent.start()
Berikut ialah contoh kod yang menggunakan Kafka untuk menghantar dan menerima mesej:
# Create a Kafka producer producer = KafkaProducerBuilder.newInstance() .setBootstrapServers("localhost:9092") .setValueSerializer(StringSerializer.class) .build() # Create a Kafka consumer consumer = KafkaConsumerBuilder.newInstance() .setBootstrapServers("localhost:9092") .setValueDeserializer(StringDeserializer.class) .setGroupId("my-group") .build() # Subscribe the consumer to the topic consumer.subscribe(Arrays.asList("my-topic")) # Send a message to the topic producer.send(new ProducerRecord<>("my-topic", "Hello, world!")); # Receive messages from the topic while (true) { ConsumerRecords<String, String> records = consumer.poll(100); for (ConsumerRecord<String, String> record : records) { System.out.println(record.value()); } }
Atas ialah kandungan terperinci Penghantaran data masa nyata: dua penyelesaian untuk dipilih antara Flume dan Kafka. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!