LogCompaction - Kafka。它是如何运作的?

时间:2018-05-31 19:55:03

标签: apache-kafka

我不明白logcompaction是如何工作的。

我已创建配置主题并使用此主题

kafka-topics --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic COMPACTION10
kafka-topics --alter --zookeeper localhost:2181 --config min.cleanable.dirty.ratio=0.01 --config cleanup.policy=compact --config segment.ms=100 --config delete.retention.ms=100 --config segment.bytes=1000 --topic  COMPACTION10

后来,我创建了一个scala程序,用1到100插入(k,V)相同的K和V.

        val data_amount = 100
        val topic = "COMPACTION10"
        val kafkaConfiguration = new Properties
        kafkaConfiguration.put("bootstrap.servers", "localhost:9092")
        kafkaConfiguration.put("key.serializer", Class.forName("org.apache.kafka.common.serialization.StringSerializer"))
        kafkaConfiguration.put("value.serializer", Class.forName("org.apache.kafka.common.serialization.StringSerializer"))

        val producer = new KafkaProducer[String, String](kafkaConfiguration)

        for (id <- 1 to data_amount){
            println( id )
            val record = new ProducerRecord(topic, id.toString, id.toString)
            producer.send(record)
        }
        producer.close()

执行此操作后,我得到了类似的内容:

1-1
2-2
3-3
4-4
5-5
6-6
7-7
8-8
9-9
10-10
11-11
12-12
13-13
14-14
15-15
16-16
17-17
18-18
19-19
20-20
21-21
22-22
23-23
24-24
25-25
26-26
27-27
57-57
58-58
59-59
60-60
61-61
62-62
63-63
64-64
65-65
66-66
67-67
68-68
Processed a total of 39 messages

为什么我只收到39封邮件,而不是100封邮件?所有他们都有不同的钥匙,因此,它不应该有压实。

如果我发送一个新的100个值(1到100),我会得到大约50条带有一些新值的消息。

后来,我尝试使用空值发送值来执行删除压缩,但是不能在生成器中发送None或null值。如果我发送“”值,它们会被识别为新值:

1-1
2-2
3-3
4-4
5-5
6-6
7-7
8-8
9-9
10-10
11-11
12-12
13-13
14-14
15-15
16-16
17-17
18-18
19-19
20-20
21-21
22-22
23-23
24-24
25-25
26-26
27-27
57-57
58-58
59-59
60-60
61-61
62-62
63-63
64-64
65-65
66-66
67-67
68-68
1-
2-
3-
4-
5-
6-
7-
8-
9-
10-
11-
12-
13-
14-
15-
16-
17-
18-
19-
20-
21-
22-
23-
24-
25-
26-
27-
28-
29-
30-
31-
32-
33-
34-
35-
36-
37-
Processed a total of 76 messages

如何发送空值以获取某些键的删除压缩?

我已经使用这些值执行了类似的结果:

我使用这些新参数执行了类似的结果。

kafka-topics --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic COMPACTION11

kafka-topics --alter --zookeeper localhost:2181 --config min.cleanable.dirty.ratio=0.01 --config cleanup.policy=compact --config segment.ms=1000 --config delete.retention.ms=10000 --config segment.bytes=1000 --topic  COMPACTION11

0 个答案:

没有答案