下載解壓 kafka 后,在 kafka/config 下有 3 個配置文件與主題及其生產、消費相關。
- server.properties--服務端配置
- producer.properties--生產端配置
- consumer.properties--消費端配置
這里主要介紹生產者和消費者的配置。
一、生產者配置
producer.properties
#指定連接 Kafka 集群所需的 broker 地址清單 bootstrap.servers=localhost:9092 #producer 用於壓縮數據的壓縮類型,壓縮類型有none、gzip、snappy,默認是無壓縮。 #壓縮最好用於批量處理,批量處理消息越多,壓縮性能越好。 #消息被壓縮后發送到broker集群,broker集群是不會進行解壓縮的,只會把消息發送到消費者集群,然后由消費者來解壓縮。 compression.type=none #生產者生產的消息被發送到哪個block,需要一個分組策略。 #分區處理類,默認partitioner基於 key 的 hash 表。 #partitioner.class= # 在向 producer 發送 ack 之前,broker允許等待的最大時間,否則會發送錯誤到客戶端。 #request.timeout.ms= # 控制 KafkaProducer.send() 和 KafkaProducer.partitionsFor() 將阻塞多長時間。 #max.block.ms= #當消息到達的速度比發送速度快,會出現生產者組將發送的消息組合成單個批量請求的現象,或者客戶端希望減少請求數量, #設置此參數,生產者將等待一個延遲,以便和其他的消息組合成一個批次發出,減少發送的請求數。 #linger.ms= #請求的最大字節數。 #max.request.size= #生產者批處理消息的字節數,以減少請求次數,這將改善client與server之間的性能。 #batch.size= # 生產者可以用來緩存消息的緩沖區大小。 #buffer.memory=
在網上看到生產端有個 acks 參數,但這個配置文件沒有,先在 Kafka 的官網手冊了解了一下,留待后面深入了解。
acks 這個參數用來指定分區中必須要有多少個副本收到這條消息,之后生產者才會認為這條消息是成功寫入的。acks 參數有 3 個值,為 1、0、-1:
- acks = 1,默認值:
生產者發送消息之后,只要分區的 leader 副本成功寫入消息,就會收到來自服務端的成功響應。
如果消息因為leader 副本崩潰等原因無法寫入 leader 副本,生產者就會收到一個錯誤的響應,為了避免消息丟失,生產者可以選擇重發消息。
為了保證消息不丟失,至少要設置為1,也就是至少保證 leader 將消息保存成功。
- acks = 0:
生產者發送消息之后不需要等待任何服務端的響應。
如果在消息從發送到寫入 Kafka 的過程中出現某些異常,導致 Kafka 並沒有收到這條消息,生產者也無從得知,消息也就丟失了。
在其他配置環境相同的情況下,acks 設置為 0 可以達到最大吞吐量。
- acks = -1:
生產者在消息發送之后,需要等待 ISR 中的所有副本都成功寫入消息之后才能夠收到來自服務端的成功響應,也就是不僅是主的分區將消息保存成功了,而且其所有的分區的副本數也都同步好了,才會被認為發動成功。
在其他配置環境相同的情況下,acks 設置為 -1 可以達到最強的可靠性。但這並不意味着消息就一定可靠,因為 ISR 中可能只有 leader 副本,這樣就退化成了 acks=1 的情況。
更多配置可以參見
Producer 配置。
二、消費者配置
consumer.properties
#用於建立初始連接到kafka集群的"主機/端口對"配置列表。 bootstrap.servers=localhost:9092 #消費者所在消費組的唯一標識 group.id=test-consumer-group ## What to do when there is no initial offset in Kafka or if the current # offset does not exist any more on the server: latest, earliest, none #當Kafka沒有初始偏移量或服務器不再有當前的偏移量怎么辦? #latest:當各分區下有已提交的offset時,從提交的offset開始消費;無提交的offset時,消費新產生的該分區下的數據 #earliest:當各分區下有已提交的offset時,從提交的offset開始消費;無提交的offset時,從頭開始消費 #none:topic各分區都存在已提交的offset時,從offset后開始消費;只要有一個分區不存在已提交的offset,則拋出異常 auto.offset.reset=
該配置文件中的參數不多,更多配置可以參見 Consumer 配置。