I'm not overly familiar with Pony, but I'm curious, and the code looks nice and clean. One oddity though; so many of the identifiers have "Kafka" in them. Does Pony not have module namespacing?
I understand, but the sheer amount of duplication is rather overwhelming. Also, a lot of it seems like implementation details related to the API/protocol and so on that don't need this kind of naming uniqueness.
Go solves this by never dumping namespaces into another namespace: You have http.Request, and that's it, which is both unambiguous and self-explanatory. Name clashes can occur (e.g. packages have the same name, or a local variable has the same name), but that's rare.
But the point you raise...
"Should this be HTTPLogger or Logger given that it is in the HTTP package"
and variations thereof is something that has been a point of contention at almost every job I've been at.
by default with Pony if you use a package, you'll have the classes imported directory into your namespace so...
HTTPLogger is more clear in that case, but you could use a qualified import and then have something like http.Logger.
It's a matter of preference.