If you use the Sync and Gauranteed options in the PublishEvents call, it will block until that batch of events is completely published. This is how winlogbeat is implemented. https://github.com/elastic/beats/blob/master/winlogbeat/beater/winlogbeat.go#L209