Sarama生产到压缩主题而不是压缩

时间:2018-08-17 06:34:54

标签: apache-kafka sarama

高级问题

我在本地运行kafka,并且使用的是压缩主题。当我运行命令行生产者和使用者时,我可以验证是否进行了压缩,但是当我使用sarama(“ github.com/Shopify/sarama”)生产者时,似乎没有发生日志压缩。

验证日志压缩

首先,我使用以下命令创建了一个主题:

bin/kafka-topics.sh --zookeeper localhost:2181 \
  --create --topic andrew.topic \
  --config "cleanup.policy=compact" \
  --config "delete.retention.ms=100" \
  --config "segment.ms=100" \
  --config "min.cleanable.dirty.ratio=0.01" \
  --partitions 1 \
  --replication-factor 1

接下来,我将使用以下内容向其发送一些消息:

  for i in $(seq 0 10); do \
  echo "sameKey123:differentMessage$i" | bin/kafka-console-producer.sh \
  --broker-list localhost:9091 \
  --topic andrew.topic \
  --property "parse.key=true" \
  --property "key.separator=:"; \
done

最后验证是否发生日志压缩:

bin/kafka-console-consumer.sh --bootstrap-server localhost:9091 \
  --topic andrew.topic \
  --property print.key=true \
  --property key.separator=" : " \
  --from-beginning

哪些印刷品:

sameKey123 : differentMessage9
sameKey123 : differentMessage10

因此,正在对andrew.topic主题进行日志压缩。

正在使用Sarama

现在,我使用sarama为以下相同主题生成消息:

package main

import (
    "fmt"
    "github.com/Shopify/sarama"
    "os"
    "os/signal"
)

func main() {
    sendMessages()

}

func sendMessages() {
    producer, err := sarama.NewSyncProducer([]string{"localhost:9091"}, nil)
    if err != nil {
        panic(err)
    }
    defer func() {
        if err := producer.Close(); err != nil {
            panic(err)
        }
    }()

    for i := 0; i <= 10; i++ {
        pm := &sarama.ProducerMessage{
            Topic: "andrew.topic",
            Key:   sarama.StringEncoder("sameSaramaKey123"),
            Value: sarama.StringEncoder(fmt.Sprintf("differentMessage%v", i)),
        }
        _, _, err := producer.SendMessage(pm)
        if err != nil {
            panic(err)
        }
    }
}

在命令行上重新启动使用者后,我看到以下输出

sameKey123 : differentMessage9
sameKey123 : differentMessage10
sameSaramaKey123 : differentMessage0
sameSaramaKey123 : differentMessage1
sameSaramaKey123 : differentMessage2
sameSaramaKey123 : differentMessage3
sameSaramaKey123 : differentMessage4
sameSaramaKey123 : differentMessage5
sameSaramaKey123 : differentMessage6
sameSaramaKey123 : differentMessage7
sameSaramaKey123 : differentMessage8
sameSaramaKey123 : differentMessage9
sameSaramaKey123 : differentMessage10

此处未进行日志压缩。无论我重新启动使用者多少次,或者用sarama日志压缩生成的消息似乎都不会出现。

更古怪

如果在使用sarama生成消息之后,然后在命令行日志压缩时又生成了更多消息,则发生

运行sarama生产者后,运行终端生产者后,我得到以下输出

sameSaramaKey123 : differentMessage10
sameKey123 : differentMessage9
sameKey123 : differentMessage10

在终端上运行生产者后,将对所有消息进行日志压缩,包括先前由sarama产生的消息。

为什么会这样?我该如何解决?

0 个答案:

没有答案