測試環境,使用python的pykafka寫入消息數據,.net Confluent.Kafka進行消費,中間發現,間隔一秒發送會延遲5秒做批處理。
python代碼:
from pykafka import KafkaClient
import datetime
import threading
import time
def producer():
client = KafkaClient(hosts="172.26.1.22:9092", broker_version='2.4')
topicdocu = client.topics["251z_37"]
producer = **topicdocu.get_producer()**
for num in range(1, 20):
time.sleep(1)
producer.produce(bytes(str(num), encoding='utf-8'), timestamp=datetime.datetime.now())
print(num)
if __name__ == '__main__':
producer()
.net 消費代碼:
var consumerConfig = new ConsumerConfig
{
BootstrapServers = "172.26.1.22:9092",
AutoOffsetReset = AutoOffsetReset.Earliest,
GroupId = "node",
EnableAutoCommit = true,
};
var kafkaBuilder = new ConsumerBuilder<string, string>(consumerConfig);
using (var consumer = kafkaBuilder.Build())
{
CancellationTokenSource cts = new CancellationTokenSource();
consumer.Subscribe("251z_37");
while (true)
{
var kafkaResult = consumer.Consume(cts.Token);
//var @event = JsonConvert.DeserializeObject<NodeStateMachine.Entity.NodeCustomerEntity>(kafkaResult.Value);
Console.WriteLine(kafkaResult.Value + " " + DateTime.Now.ToString("HH:mm:ss"));
}
}
問題效果:
可以看到,這種情況會5秒寫入一次數據,消費端會五秒接收到一批數據。
問題原因:producer = topicdocu.get_producer(sync=True) 初始化時候,需要設置sync=True,需要傳參爲同步處理。之後就是一切正常了。