兩種方案:
方案一,kafka topic 只設置一個partition分區
方案二,producer將消息發送到指定partition分區
解析:
方案一:kafka默認保證同一個partition分區內的消息是有序的,則可以設置topic只使用一個分區,這樣消息就是全局有序,缺點是只能被consumer group里的一個消費者消費,降低了性能,不適用高並發的情況
方案二:既然kafka默認保證同一個partition分區內的消息是有序的,則producer可以在發送消息時可以指定需要保證順序的幾條消息發送到同一個分區,這樣消費者消費時,消息就是有序。
producer發送消息時具體到topic的哪一個partition分區,提供了三種方式
1)指定分區
2)不指定分區,有指定key 則根據key的hash值與分區數進行運算后確定發送到哪個partition分區
3)不指定分區,不指定key,則輪詢各分區發送