본관은 청풍(淸風). 자는 문통(文通), 호는 효운루(曉雲樓). 김태로(金泰魯)의 증손으로, 할아버지는 관찰사 김치후(金致垕), 아버지는 이조판서 김종정(金鍾正), 어머니는 신경(申暻)의 딸이다.
1776년(영조 52) 생원시에 합격하고, 1800년(정조 24)에 정시 문과에 병과로 급제해 설서(說書)에 제수되었다. 1801년(순조 1) 홍문관교리·헌납 등을 역임했다.
이때 교리 이상겸(李象謙)의 유배를 청하는 등 경연에서의 과격한 발언으로 김대비(金大妃: 貞純王后)의 격노를 사서 해남현(海南縣)에 유배되었다. 그러나 그해 다시 김대비에 의해 특방되었다.
이후 초계문신(抄啓文臣)으로 선발된 뒤, 종부시부정(宗簿寺副正)·응교(應敎) 등을 거쳐 승지가 되었다. 안동부사 재임시 선정을 베풀어 백성들로부터 칭송이 자자했다.
1805년 통정대부(通政大夫)로 가자(加資)되고, 1808년 예조참의·대사간에 임명되었다. 이듬해 이조참의를 거쳐 1810년 경상도관찰사로 부임했을 때는 신수곡(信需穀)을 비치하도록 했다. 이는 통신사가 일본에 갈 때 많은 경비가 소요되는 문제를 해결하고자 한 것이다.
영문(營門)의 별비전(別備錢)의 이식 중 열읍(列邑)에서 취한 것에 이자를 붙여 징봉(徵捧)하게 하고, 전(錢) 1만 민(緡)으로 곡(穀) 1만 석을 만들었고, 제민창미(濟民倉米) 2,000석으로 조(租) 6,000석을 만들었으며, 또한 스스로 4,000석을 비축하고, 군읍(郡邑)의 대소와 공비(供費)의 많고 적음을 살펴 분표(分俵)해 모(耗)를 취해 이듬해 가식(加殖)한 것으로 통신사의 비용 문제를 해결했던 것이다. 또한 백성들에 대한 잡부금을 엄금함으로써 신망을 얻었다.
1813년 이조참의를 거쳐, 1815년 예조참판·동지의금부사(同知義禁府事)·한성부좌윤 등을 역임했고, 중간중간 승지에 임명되었다. 저서로는 『효운루집(曉雲樓集)』·『청사유편(靑史類篇)』이 있다.