Я не понимаю, как работает 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
Позже я создал программу для скалы, которую можно вставить (k, V) от 1 до 100 с теми же 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