Sobes.tech
Junior — Middle

Kafkaда керектүү өзүнүн маалымат агымындагы ордун кантип сактайт?

sobes.tech AI

AIден жооп

Apache Kafkaда, керектүүчү өзүнүн жайгашкан жерин маалымат агымында оффсеттер (offsets) аркылуу сактайт. Offset — бул тема бөлүмүндөгү билдирүүнүн тартибиндеги номуру.

Керектүүчү мезгил-мезгили менен азыркы offsetти бекитет (commit), ошондуктан кайра ишке киргизүү же ката болгондо, туура жерден окууну уланта алат. Commit автоматтык (auto-commit) же кол менен болушу мүмкүн.

Go үчүн Kafka кардарларында (мисалы, sarama), offset адатта, Kafka өзү башкарган __consumer_offsets атайын темада сакталат. Бул бир топ керектүүчүлөрдүн топтомуна окууну координациялоого жана ар бир билдирүүнү так бир жолу иштетүүгө мүмкүндүк берет.

Кол менен offsetти бекитүүнүн мисалы Goда sarama колдонуу менен:

partitionConsumer, _ := consumer.ConsumePartition(topic, partition, sarama.OffsetNewest)

for msg := range partitionConsumer.Messages() {
    // билдирүүнү иштетүү
    fmt.Println(string(msg.Value))
    // offsetти бекитүү
    consumer.MarkOffset(msg, "")
}

Ошентип, керектүүчүнүн жайгашкан жери — бул акыркы бекитилген offset, ал Kafkaда сакталат жана туура жерден окууну улантууга мүмкүндүк берет.