Sobes.tech
Junior — Middle

Ինչպե՞ս է Kafka-ի սպառողը պահպանում իր դիրքը տվյալների հոսքում:

sobes.tech AI

Պատասխան AI-ից

Apache Kafka-ում սպառողը պահպանում է իր դիրքը տվյալների հոսքում՝ օգտագործելով տեղաշարժեր (offsets): Offset-ը՝ հաղորդագրության հերթական համարը թեմայի բաժանման մեջ:

Սպառողը ժամանակ առ ժամանակ հաստատում է (commit) ներկայիս offset-ը, որպեսզի վերագործարկման կամ սխալի դեպքում կարողանա շարունակել ընթերցումը ճիշտ տեղից: Commit-ը կարող է լինել ավտոմատ (auto-commit) կամ ձեռքով:

Go-կլիենտների Kafka-ում (օրինակ, sarama), offset-ը սովորաբար պահվում է հատուկ թեմայում __consumer_offsets, որը կառավարում է Kafka-ն ինքնը։ Սա թույլ է տալիս մի քանի սպառողների խմբում համակարգել ընթերցումը և ապահովել, որ յուրաքանչյուր հաղորդագրություն ճիշտ մեկ անգամ մշակվի:

Օրինակ՝ ձեռքով offset-ի commit-ի օրինակ Go-ում՝ sarama օգտագործելով:

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

for msg := range partitionConsumer.Messages() {
    // հաղորդագրության մշակումը
    fmt.Println(string(msg.Value))
    // offset-ի commit
    consumer.MarkOffset(msg, "")
}

Այսպիսով, սպառողի դիրքը հոսքում՝ դա վերջին հաստատված offset-ն է, որը պահվում է Kafka-ում և թույլ է տալիս շարունակել ընթերցումը ճիշտ տեղից։